0

実際、同じIPアドレスで複数のRAWソケットを作成すると. それらすべてをバインドでき、その結果、パケットはすべてのソケットで受信されます。

同じIPアドレスをバインドしようとしている他のプロセスがエラーを受け取るなど、回避できる方法はありますか?

生のソケットを使用しています

#include <sys/socket.h>
#include <netinet/in.h>
raw_socket = socket(AF_INET, SOCK_RAW, int protocol);

マンページ raw(7)

bind(2) 呼び出しを使用して、生のソケットを特定のローカル アドレスにバインドできます。バインドされていない場合、指定された IP プロトコルを持つすべてのパケットが受信されます。さらに、SO_BINDTODEVICE を使用して RAW ソケットを特定のネットワーク デバイスにバインドできます。socket(7) を参照してください。

「ポート」はIPではなくTCPおよびUDPの概念であるため、生のソケットを特定のポートにバインドすることはできません。これら 3 つのプロトコルのヘッダー図をちょっと見てみると、明らかになるはずです。私は、ポートの概念が不明な下位レベルで作業しています。これは、ポート番号に関して私が理解していることです。

4

1 に答える 1

0

いいえ。その RAW という事実は、RAW インターネット プロトコル以外に他のプロトコルがないことを意味します。TCP または UDP がないと、このパケットがどのアプリケーションに送信されるかを識別するためのポートが存在しないため、代わりに、すべてを IP パケットのペイロードでフィルタリングする必要があります。これは手動で行う必要があります。最善の方法は、検査後にこれらのパケットをどこにでも転送するプログラムを作成することです。

于 2013-08-08T14:09:35.353 に答える