tcpdumpキャプチャのマルチキャスト結合の作成


11

特定のマルチキャストトラフィックをキャプチャするLinuxシェルスクリプトを書きたいのですが。特定のように、1つの特定のマルチキャストグループ/ポートのすべてのトラフィックを含む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-y方法はありますか?mdumpこれらの結合を確立するために使用することもできますがmdump、グループ上のすべてのデータを処理するので、それは無駄に見えますが、私はそれを捨てるつもりです。

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


1
非標準バージョンのtcpdumpを実行している場合を除き、インターフェイスを混合モードしています。-p標準バージョンのtcpdumpのフラグは、混合モードをデフォルトでオフします。無差別モードでは、サブスクリプションが確立されているかどうかに関係なく、マルチキャストトラフィックを含むすべてのトラフィックが表示されます。ただし、スイッチドネットワーク上にいて、スイッチがトラフィックを転送するようにサブスクリプションを確立する必要がある場合は除きます。

1
@GuyHarris:説明をありがとう。スイッチドネットワークを使用しています。サブスクリプションがすでに確立されていない場合(つまりmdump、別のコンソールで実行されている場合)、tcpdump何も表示されません。
John Dibling 2014

また、無差別モードでの実行を望まない場合は、おそらくスイッチに「ミラーリングされたポート」を設定することを望まない(または許可さえさせない)(スイッチがそれをサポートしていると仮定した場合)スイッチを介したすべてのトラフィックのコピー(または、可能であれば、特定のポートを介したすべてのトラフィック)。

では、スクリプトでこれを行うことの何が問題になっていますか?重要なのは、誰かがそれを「通常の方法」であると考えているかどうかではなく、仕事が完了したかどうかです。スクリプトの「異常」とは何ですか。

無差別モードを有効にすると、明らかにホスト上の他のVMに影響するため、無効モードは無効になっています。これは望ましくありません。私はスイッチにミラー化されたポートを設定できます -これらは40GBのaristasです-しかし、あなたの見解がよくわかりません。
John Dibling 2014

回答:


5

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フラグを使用すると言われていることは、うまくうまくトリックを行います

しかし、これはいくつかの後続の質問を引き起こします。私はあなたが走っているのtcpdumptshark、あなたがルート権限を持っていると思います。 あなたが 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を追跡し、trapBASHでそれをクリーンアップすることは、まさにあなたが探しているものです。

それが終わったら(ただし、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メッセージの送信が完了したら入力してください。

この時点で、エンドツーエンドのテストを見て、いくつかのコマンドを使用して、世界で最悪の、最も安全でないチャットシステムを構築したはずです。


1
うわー、答えを出すのに4年かかりました!私はこれをもうやっていませんし、実際にテストする方法はありませんが、それでも受け入れます。
John Dibling

1
今すぐ重宝します!:Dブライアンに感謝:)
quaylar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.