tcpdump キャプチャ用のマルチキャスト接続の作成

tcpdump キャプチャ用のマルチキャスト接続の作成

特定のマルチキャストトラフィックをキャプチャするためにLinuxシェルスクリプトを作成したいと思います。特に、特定のマルチキャストグループ/ポートへのすべてのトラフィックを含むpcapファイルを作成したいと思います。

以下は、トラフィックを表示するために使用するコマンドラインです。

tcpdump -nnXs 0 -i eth1 udp port 22001 and dst 233.54.12.234

グループのマルチキャストサブスクリプションを設定した場合は、正常に機能します。たとえば、別のコンソールでこのコマンドを実行すると、次のようになります。

mdump 233.54.12.234 22001 10.13.252.51

tcpdumpパケットが見えます。mdump実行していない場合は何もtcpdump表示されません。

キャプチャを開始する前に、これらのマルチキャスト接続を確立する標準的なLinux方式の方法はありますか?これらの接続を作成するために使用できますが、グループ内のすべてのデータが処理されるため、無駄のようにmdump見えますが、それはmdumpただ捨てられます。

私の特定の環境のために、インターフェイスを無差別モードに設定することはお勧めできません。実際に禁止されることもあります。

答え1

TL;DR - 次のいずれかを選択してください。

sudo ip addr add 233.54.12.234/32 dev eth1 autojoin

socat STDIO UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1 > /dev/null


最初は「ただ使ってみてください」と言いたかったですip maddress add。問題ip maddressはその影響だけですリンクレイヤーマルチキャストアドレスではありません。規約マルチキャストアドレス(man 8 ip-maddress)。

つまりautojoin住所動詞はうまく動作します。

しかし、これにより、いくつかの後続の質問が提起されます。私はあなたが実行されているかtcpdumptsharkrootアクセス権を持っていると仮定します。 そうでなければ22001は高い番号のポートで、次のsocatようなその他のユーティリティです。

しかし、私の言葉をそのまま受け入れないでください。これをテストするために、socatマルチキャストUDPパケットncat(通常はnmap/packet経由)を使用または生成できますnmap-ncat

特定数のホストで実行一つ次の2つの組み合わせ:

オプション1:

sudo ip addr add 233.54.12.234/32 dev eth1 autojoin

オプション2:

socat -u UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1 /dev/null &

最初のオプションにはルートが必要か、少なくともルートが必要です。能力 CAP_NET_ADMIN。 2番目のオプションはルートを必要としませんが、フォアグラウンドで実行されると予想されるため可能スクリプトにはあまり役に立ちません(サブプロセスIDを追跡し、trapBASHがあなたが探しているものかもしれません。

tcpdump操作が完了したら(ただし、テスト/コマンドで複雑すぎる前にtshark)、カーネルがインターフェースが正しいIGMPグループに参加していると認識していることを確認してください。とてもクールだと感じたら、クレイジーなように16進数を分析することもできますが、/proc/net/igmpただ実行することをお勧めしますnetstat -gn

正しいグループにサブスクライブされたインターフェイスが表示されていることを確認したら、tcpdumpコマンドを実行できます。

tcpdump -nnXs 0 -i eth1 udp port 22001 and dst 233.54.12.234

または、tcpdumpパスを完全に使用したくない場合(またはこの回答を誤って見つけてマルチキャストが機能していることを確認したい場合)、上記のコマンドを使用して次のものを置き換えて参加しsocatて内容をエコーできます。STDOUT/dev/nullSTDOUT

socat -u UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1

次に、次の2つのオプションのいずれかを使用して、別のコンピュータから簡単なテストデータを送信します。

オプション1:

socat STDIO UDP-DATAGRAM:233.54.12.234:22001

オプション2:

ncat  -u 233.54.12.234 22001

これらのコマンドを実行すると、インタラクティブに入力を待ちます。何かを入力してEnterキーを押して送信し、CTRL+D完了したらEOFメッセージを送信します。

この時点で、エンドツーエンドのテストを確認し、いくつかのコマンドを使用して世界で最悪で最も安全でないチャットシステムを構築する必要があります。

ip addr add ...注:(オプション1)を使用して参加したマルチキャストグループを退会する場合は、次のことができます。

sudo ip addr del 233.54.12.234/32 dev eth1 autojoin

関連情報