0

特定のホストでポート 443 が開いているかどうかを確認する次のコードがあります。

import java.net.*;
import java.io.IOException;

public class Scan {

    public static void main (String[] args) {
        String host="put hostname here";
        int port=443;

        try{
            Socket s = new Socket(host,port);
            System.out.println("Can listen on port "+port+
                       " in host "+host+" is open");

        } //end try
        catch (IOException ex)
        {
            //remote host is not listening on port 443
            System.out.println("Can not listen on port "+port+
                       " of host "+host);
        } //end catch
    }
}

私の質問は次のとおりです。特定のホストでポート 443 が開いていない場合、ホストのグループをチェックする必要があるため、プログラムが非常に遅くなります。コードを改善してポート 443 のスキャンを高速化し、同時に信頼性を維持する方法はありますか? ソケットを使用する以外に、Javaプログラミングを使用してポートスキャンを行う方法はありますか?

私が持っているホスト名は接続されているので、スキャンの前に ping を実行しても役に立たないことに注意してください。ポート 443 が開いているか閉じているかを確認するだけで済みます。

4

1 に答える 1

2

ホストのグループをスキャンする必要がある場合は、各チェックを別々のスレッドで実行するだけです。これにより、1つのホストが他のホストの処理を妨げないようにします。

長くて独立したIO操作は、マルチスレッドの典型的なユースケースです。ネットワークの応答を待っている間は実質的に何もしないので、マシン上のCPUの数について心配する必要はありません。他の人が提案しているように、タイムアウトを追加することも妥当な追加であり、マルチスレッドに加えて使用できます。

于 2012-07-04T08:33:29.657 に答える