3

マルチスレッドのpingプログラムを書いていました。各スレッドで (IP ごとに) rawsocket を作成し、sendto() を使用してそれぞれに ICMP Echo Request を送信してから、各スレッドで recvfrom() を実行しました。さまざまなソケットで IP からメッセージを取得しています (IP1 の sendto にソケット S1 を使用した場合、IP1 から S1、S2 などへのエコー応答を取得します)。バインドを行う必要がありますか?

また、別の問題は、ICMP リクエストを 1 つしか送信していないにもかかわらず、ターゲットから多くのエコー応答が返されることです。これを制限する方法はありますか?これにより、他の ICMP パケットの一部が失われます。プログラムが ICMP エコーの送信を停止するようにターゲットに要求する方法はありますか?

ありがとう、

4

1 に答える 1

3

raw ソケットはすべての受信パケットを取得します。独自のフィルタリングを行う必要があります。または、できれば生のソケットを 1 つだけ開き、受信するすべてのエコー応答を単一のスレッドで検出する必要があります。

重複したパケットは、複数の raw ソケットが原因である可能性があります。ソケットごとに、各着信パケットのコピーが 1 つ取得されます。また、場合によっては、インターネット パケットが重複する可能性があることにも注意してください (ただし、これはまれです)。

于 2011-08-01T20:41:58.780 に答える