特定のマルチキャストトラフィックをキャプチャするために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
、住所動詞はうまく動作します。
しかし、これにより、いくつかの後続の質問が提起されます。私はあなたが実行されているかtcpdump
、tshark
rootアクセス権を持っていると仮定します。 そうでなければ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を追跡し、trap
BASHがあなたが探しているものかもしれません。
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/null
STDOUT
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