-1

SSHポート スキャナーを作成しており、特定のポートがそのポートで期待される標準サービス (やなど) を実行しているかどうかを確認したいと考えていますHTTP。方法の 1 つは、そのポートにクエリを送信し、返された情報を分析することです。たとえば、SSH は接続するとすぐにバージョン情報を送信してくれます。ただし、connect()IP アドレスでポート 22 を使用すると、Error number: 110. Error message: Connection timed out. どんなアイデアでも大歓迎です。

コード全体は長い話です。ここに一部を抜粋して貼り付けます。

struct sockaddr_in dest_addr;
dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(22);
dest_addr.sin_addr.s_addr = inet_addr("8.8.8.8");

int service_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (service_sock < 0) {
    printf("Error creating service socket. Error number: %d. Error message: %s\n", errno, strerror(errno));
    exit(0);
}

int dest_addr_len = sizeof(dest_addr);
if (connect(service_sock, (struct sockaddr *)&dest_addr, dest_addr_len) < 0) { // stuck here
    printf("Error connection. Error number: %d. Error message: %s\n", errno, strerror(errno));
    exit(0);
}

この質問を明確にするために、例を示す必要があります。サービスを確認する方法を見つけましたHTTP。つまり、文字列"GET / HTTP\n\n"を宛先アドレスに送信します。次に、関数を呼び出しrecv()て、返されたメッセージを読み取ります。私はこのようなものを得ることができます。

HTTP/1.0 400 Bad Request
Content-Type: text/html; charset=UTF-8
Content-Length: 1419
Date: Tue, 02 Dec 2014 05:56:25 GMT
Server: GFE/2.0
...

HTTPバージョンは1.0最初の行から読み取ることができます。

ここでは、リモート ホスト上の多くのサービスを確認したいと考えていSSHますHTTP。推測するのは良くないと思います。したがって、これらの情報を から取得するための一般的な方法が必要dest_addrです。

4

1 に答える 1

0

OK、最後に自分の質問に答える必要があります。この検証作業を取得し、投稿を書きました。

于 2014-12-03T18:14:54.980 に答える