同じネットワークにUbuntuマシンA(ip 192.168.0.20)とUbuntuマシンB(ip 192.168.0.21)があるとします。たとえば、システムAがRTPをマルチキャストアドレスとポートにストリーミングしているかどうかを確認する方法
239.0.0.1:5005
Bマシンでは?
答え1
IPマルチキャストが単純スイッチのすべてのポートにフラッディングされていない環境では、tcpdump
トラフィックをキャプチャできない可能性があります。スイッチはIGMPレポートとクエリを受信し(または独自のクエリを実行し)、このマルチキャストトラフィックがそうでないことを確認します。必要です。マシンBポートはこれを送信しません。これ返品setsockopt(fd, SOL_IP, IP_ADD_MEMBERSHIP, ...)
ソケットでマルチキャストクライアントを使用する必要があります。
インストールsocat
と使用:
socat -d -d -u udp4-recv:5005,reuseaddr,ip-add-membership=239.0.0.1:192.168.0.21 /dev/null
これは次のことを行います。
初期IGMPメンバーシップレポートを送信して、インターフェイス192.168.0.21でマルチキャストグループ239.0.0.1に参加します。クエリがある場合は、IGMPスヌーピングブリッジで処理すると、スマートスイッチがマシンBスイッチポートにトラフィックを送信します。
オプションで、ここで
reuseaddr
同じコマンドを複数回実行できます(システムレベルのマルチキャストのみ、各コマンドに単一のマルチキャストストリームのコピーを受信させる)。-d -d
詳細表示socat
:受信したパケットの送信元も表示されます。登録後、239.0.0.1に関連するすべてをキャプチャできるようになりました
tcpdump
。192.168.0.20が239.0.0.1に送信されると、受信したパケットには192.168.0.20が送信元として含まれ、送信されたシステムが表示されます。
データが受信されましたが忘れられました
/dev/null
。データがビデオストリーム(実際には5004ではなくポート5005)の場合、代替デバイスはその/dev/null
コマンドを使用して- | mpv -
ビデオを表示します。mpv
いつソカット停止すると、カーネルはIGMP終了メッセージを送信します。スイッチの設定に応じて、対応するマルチキャスト宛先をコンピュータBに送信するのがすぐに停止するか、次の分以内に発生します。tcpdump
したがって、トラフィックは引き続きキャプチャできますが、これは持続しません。
メモ:
愚かなスイッチ(または仮想Linuxブリッジ)でネットワークを処理する環境mcast_querierスイッチが設定されていない場合)tcpdump
スイッチはすべてのポートでトラフィックをフラッディングするため、すべての場合にマルチキャストトラフィックがキャプチャされます。