TL; DR-1つ選択してください:
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
、あなたがルート権限を持っていると思います。 あなたが 22001 を使用していない場合、ポートは番号が大きく、他のユーティリティsocat
も同様に処理を行います。
とはいえ、私の言葉を信じないでください。これをテストするためだけに、socat
またはncat
(通常nmap
/でパッケージ化されたnmap-ncat
)を使用してマルチキャストUDPパケットを生成できます。
一部のホストでは、次の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番目のオプションはrootを必要としませんが、フォアグラウンドで実行されることも想定しているため、スクリプト作成にあまり役立ちません(ただし、子プロセスIDを追跡し、trap
BASHでそれをクリーンアップすることは、まさにあなたが探しているものです。
それが終わったら(ただし、tcpdump
/ tshark
コマンドを実際にテストする前に)、カーネルが正しいIGMPグループに参加したインターフェイスを認識していることを確認してください。あなたが超豪華だと感じているなら、あなたはヘクスを外に解析する/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
メッセージの送信が完了したら入力してください。
この時点で、エンドツーエンドのテストを見て、いくつかのコマンドを使用して、世界で最悪の、最も安全でないチャットシステムを構築したはずです。
-p
標準バージョンのtcpdumpのフラグは、混合モードをデフォルトでオフにします。無差別モードでは、サブスクリプションが確立されているかどうかに関係なく、マルチキャストトラフィックを含むすべてのトラフィックが表示されます。ただし、スイッチドネットワーク上にいて、スイッチがトラフィックを転送するようにサブスクリプションを確立する必要がある場合は除きます。