マルチキャストハウツー から:
IP_ADD_MEMBERSHIP。
関心のあるマルチキャストグループをカーネルに通知する必要があることを思い出してください。グループに関心のあるプロセスがない場合、ホストに到着するそのグループ宛てのパケットは破棄されます。
そうしないと、tcpdump
が付いたパケットは表示されません。
マルチキャストインフラストラクチャによって異なります。たとえば、多くのマルチキャストルーターを設定し、スイッチにさまざまなルールを設定できます(サブスクリプションを静的、動的、または特定のポート/ノードで禁止することもできます)。
ただし、マルチキャストグループにサブスクライブする場合は...サブスクライブするだけです。明らかにIGMPスヌーピングが有効になっているインフラストラクチャを介してIGMPJOINパケットを送信します。さまざまなツールを使用してIGMPパケットを生成できます。
より高いレベルへの一歩を踏み出し、 iperf を使用して任意のマルチキャストグループにサブスクライブします。ネットワークインフラストラクチャがそれほど複雑ではなく、 "許可"でマルチキャストグループにサブスクライブする場合は、次を使用します。
iperf -s -u -B 239.100.100.100
ここで、239.100.100.100はマルチキャストグループアドレスです。
詳細なレポートを取得するには、同時にtcpdumpを実行します。
IperfはIGMPv1とv2のみをサポートしていると私は信じていることに注意してください。あなたがIGMPv3 JOINパケットを作りたいのなら、あなたが述べたように、プログラムを書くのはそれほど難しいことではないはずです。しかし、おそらく同じことをするツールはもっとたくさんあるでしょう。
マルチキャストHOWTOのリンク先ページには、tcpdumpについて何も書かれていません。
Tcpdumpはlibpcapを使用してネットワークパケットをキャプチャし、イーサネットでは、libpcapは次の両方をサポートします。
プロミスキャスモード。ネットワークアダプタは、宛先アドレスに関係なく、受信したすべてのパケットをホストに配信し、ネットワークスタックは、フィルタを通過するすべてのパケットをキャプチャメカニズムに配信します。
非無差別モード。ネットワークアダプタは、配信するように構成されたユニキャストパケット、ブロードキャストパケット、およびマルチキャストパケットをホストに配信し、ネットワークスタックは、キャプチャフィルタを通過するすべてのパケットをキャプチャメカニズムに配信します。
Tcpdumpは、デフォルトで無差別モードを要求します。そのモードでは、ホストに送信されないユニキャストパケットも表示されます(スイッチドネットワーク上にないか、スイッチドネットワーク上にあるが、すべてのトラフィックを取得する「ミラー」ポートに接続されている場合)。
Tcpdumpを渡すと、-p
フラグ、無差別モードを要求します。この場合、マシンが「取得する必要がある」パケットのみが表示されます。その場合、特定のマルチキャストグループに関心を登録しているプロセスがない場合、そのグループのマルチキャストアドレスに送信されたパケットは表示されませんが、その場合、それはバグではなく、マシンが機能していないため、機能です。 tそれらのパケットで何かをします。
したがって、すべてのパケット(すべてのホストへのユニキャストパケット、すべてのマルチキャストアドレスへのマルチキャストパケット、およびブロードキャストパケット)を表示する場合は、tcpdump(またはWiresharkなど)を無差別モードで実行し、スイッチドネットワークを使用している場合は、 「ミラーポート」または「SPANポート」、またはスイッチベンダーが呼んでいるもの(「ミラーポート」をサポートしている場合)。
無差別モードとスイッチドネットワークの詳細については、 イーサネットパケットキャプチャに関するWireshark Wikiページ を参照してください。このページの情報は、Wiresharkだけでなく、tcpdumpを含むすべてのパケットスニファに適用されます。