マルチキャストグループに参加するためのLinux内蔵またはオープンソースプログラム?


7

私はtcpdumpを使用してマルチキャストパケットをキャプチャし、tcpdumpがパケットを「見る」ようにマルチキャストフィードに参加するためのカスタムプログラムをコーディングしなければなりませんでした。 netcatまたは他のアプリケーションが代わりにこの機能を実行できるかどうか疑問に思いますか?

回答:


10

あなたはこれを使用して行うことができます ip maddr add コマンド。


構文

ip maddr [ add | del ] MULTIADDR dev STRING 

説明

インターフェイス上で待機するために、スタティックリンクレイヤマルチキャストアドレスをアタッチ/デタッチします。プロトコルマルチキャストグループを静的に参加させることは不可能であることに注意してください。このコマンドはリンク層アドレスのみを管理します。

address LLADDRESS (default)
    the link layer multicast address. 
dev NAME
    the device to join/leave this multicast address. 

有線接続の例

ip maddr add ff02::fb dev eth0

無線接続の例:

ip maddr add 224.0.0.251 dev wlan0

これをUbuntu 14.04ボックスで実行すると、次のエラーメッセージが表示されます。 "ff02" is invalid lladdr. Error: "ff02" is not a legal ll address.
Nathan Osman

3
さらに掘り下げてみると、 ip maddr とだけ動作します リンク層 マルチキャストアドレス プロトコル層 マルチキャストアドレス
Nathan Osman

@ NathanOsman-プロトコル層マルチキャストアドレスを購読する方法を見つけたことはありますか?
kit

残念ながら、この回答は質問には回答しません。 リンク層 すなわちMACアドレス。最初のコメントで述べたようにIPv6の例は失敗し、IPv4の例は失敗するが静かに失敗する ip maddr show
Pierz

8

socatを使ってグループを購読することができます。これは、L2とL3の両方のサブスクリプションでうまく機能します。

socat STDIO  UDP4-DATAGRAM:239.101.1.68:8889,\
  ip-add-membership=239.0.1.68:10.100.201.1

これはグループを購読します 239.0.1.68 アドレス付きのインタフェースを使用する 10.100.201.1。の UDP4-DATAGRAM:239.101.1.68:8889 bitは、socatがすべてを標準出力に出力するのを防ぐために、データを受信すべきではないダミーグループおよびUDPポートでパケットを待機します。代わりに、ペイロードをstdoutに転送したい場合は、そのグループとポートを、サブスクライブしたい実際のグループとポートに変更します。

複数のコンマ区切り ip-add-membership ディレクティブは、同時に複数のグループを購読するように指定できます。 socatが終了すると、IGMPサブスクリプションもクリアされるようです。


0

に加えて socat 答えは、ここでヘビー級の解決策です - smcroute 。このアプリケーションはデーモンとして実行され、その場で制御できます。

smcroutectl join eth0 239.1.1.27
smcroutectl leave eth0 239.1.1.27

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.