0

ローカル ネットワーク上のすべての IGMP メッセージを盗聴しようとしています (これについては説明しません ;-))。私は IGMP/ルーティングの専門家ではないので、これに関していくつか質問があります。

それは可能ですか?raw ソケットから IGMP を読み取ることができることは知っていますし、Wireshark を使用してローカル コンピューターに到達する IGMP メッセージを監視できることも知っていますが、私を困惑させるのは次の点です。

マルチキャストアドレスに参加する別のコンピューター(スイッチによってWiresharkを実行しているコンピューターから分離された)でプログラムを使用していますが、Wiresharkでメンバーシップレポート/ JOINが表示されるとは限りません。すべてのIGMP 参加がローカル ネットワーク全体に分散されていることが保証されているかどうかは誰にもわかりませんか? Wireshark で結合が表示されることもあれば、表示されないこともあります。

すべての IGMP Join メッセージが常にネットワーク上のすべてのステーションに送信されると仮定すると、次のようなことを行うマルチキャスト グループのメンバーであるステーションを監視することはできないはずです (posix ソケットの C++ コード)。

int rawSock = ::socket(AF_INET, SOCK_RAW, IPPROTO_IGMP);

uint8_t buf[10*1024];
while(true)
{
    ssize_t rval = ::recv(rawSock, buf, sizeof(buf), 0);
    iphdr *iph = (iphdr*)buf;
    printf("Received %d bytes - protocol %d\n", rval, iph->protocol);
    /*do whatever needed to the IGMP message*/
} 
4

1 に答える 1

2

あなたの問題はこれかもしれません... すべての IGMP パケットには IP TTL=1 が必要です。つまり、IGMP はルーティングされた境界 (vlan など) を決して越えません。

RFC 2236 - IGMP バージョン 2から:

   Like ICMP, IGMP is a integral part of IP.  It is required to be
   implemented by all hosts wishing to receive IP multicasts.  IGMP
   messages are encapsulated in IP datagrams, with an IP protocol number
   of 2.  All IGMP messages described in this document are sent with IP
   TTL 1, and contain the IP Router Alert option [RFC 2113] in their IP
   header.

これは、どこにいても IGMP を確認できないことを意味します。上記の IGMP 受信者が送信者と同じ IP サブネット上にあることを確認する必要があります。また、マシンが IGMP を受信して​​いるかどうかを確認するために、tsharkまたはwireshark...を使用することもできます。

于 2011-10-26T11:28:55.890 に答える