0

ネットワーク内の特定のポート番号 (8000) をスキャンするにはどうすればよいですか?
一般的なソケットTCP接続を使用して試しました。動作しますが、生きている IP の数が 15 を超えると、かなりの時間がかかります。目標は、特定のポートが開いているネットワークから IP のリストを取得することです。
これは、ネットワークからIPのリストを取得する方法です

    std::vector<std::string> resultIPList;
    FILE* pipe = popen("arp-scan --localnet","r");
    if(!pipe)
    {
        fprintf(stderr,"Unable to open pipe");
        return resultIPList;
    }
    char buffer[128];
    while(!feof(pipe))
    {
        if(fgets(buffer, 128, pipe) != NULL)
        {
            stringBuffer += buffer;
        }
    }
    pclose(pipe);

これで、stringBuffer に IP リストが追加されました。文字列から ip を抽出し、それらの ip のベクトルを提供するパーサーを作成しました。次に、特定のポートについてそれぞれを 1 つずつスキャンします。以下の関数は Windows 用です。Linux では、boost::asio を使用して同じことを行っています。

    struct sockaddr_in client;
    int sock;  
    client.sin_family      = AF_INET;
    client.sin_port        = htons(portNo);
    client.sin_addr.s_addr = inet_addr( Ip.c_str() );
    sock = (int) socket(AF_INET, SOCK_STREAM, 0);
    return (::connect(sock, (struct sockaddr *) &client,sizeof(client)) == 0);
4

2 に答える 2

0

nmap を使用します。

または、ループ内で、ノンブロッキング ソケットを使用して各ポートに「接続」を呼び出します。収集したすべてのファイル記述子を保存し、「select()」を使用して接続されているかどうかを確認します。

于 2014-01-21T23:44:07.210 に答える
0

間違ったプログラムを使用しています。netstat の出力を読むだけです。

于 2014-01-21T23:26:20.913 に答える