誰かが特定のマルチキャストアドレスを介してRTPをストリーミングしているかどうかを確認する方法は?

誰かが特定のマルチキャストアドレスを介してRTPをストリーミングしているかどうかを確認する方法は?

同じネットワークに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スイッチはすべてのポートでトラフィックをフラッディングするため、すべての場合にマルチキャストトラフィックがキャプチャされます。

関連情報