Linuxで単一のコマンドをパケットスニッフィングするための簡単なコマンドラインツールはありますか?


11

Linuxで単一のコマンドをパケットスニッフィングするための単一のコマンドラインツールがあればいいと思います。sniff dumpfile commandターミナルでパケットスニッフィングするコマンドを実行し、他の場所にパケットのダンプを取得できるようにするようなものです。

単一のネットワークインターフェイス上のすべてのTCPトラフィックではなく、入力した単一のコマンドのネットワークトラフィックのみをダンプ/保存/表示したいと思います。したがって、コンピューターにログインしていて、IRCをバックグラウンドで実行している場合sniff somefile wget http://www.google.com、wgetコマンドがhttp://www.google.comをダウンロードするために行ったすべてのネットワークトラフィックを確認したいと思います。「somefile」にIRCネットワークトラフィックの混乱を招きたくありません。

別のコマンドを受け入れ、別のことを行うlinux / unixコマンドがたくさんあります。sudo(スーパーユーザーとして実行)、nice変更の素敵なレベル、trickle(コマンドの帯域幅を制限します)


1
正確にあなたがしたいことは何ですか?特定のコマンドが実行されているかどうかを確認しますか?ネットワークトラフィックを傍受しますか?フレーズ「コマンドを盗聴パケット」を使用すると、すべての私には意味がありませんので...
wzzrd

wzzrd、拡大された質問を参照してください
ロリー

回答:


10

私が知っていることは何もありませんが、理論的には同様のものを得るのは難しくないはずです。Straceは、ネットワークのシステムコールをインターセプトするために使用できます。

# strace -f -e trace=network -s 10000 /usr/bin/command arguments

これにより、カーネルとプロセス間で送信されるデータに関する情報が得られます。straceの出力は、望んでいるとおりのものではありません。ただし、straceはptrace syscallを使用してシステムコールをインターセプトします。データをもう少し便利に出力するプログラムを作成することもできます。

または、便利で便利なソケットをインターセプトし、syscallをバインドおよびリッスンすることもできます。これらの呼び出しでptraceとlibpcapを使用して、新しいソケットが開かれるたびにキャプチャフィルターを動的に変更する小さなプログラムを作成することもできます。


Wiresharkが読み取れるものを出力するのは素晴らしいことです。
ブラッドギルバート

上記のstraceは、Solaris(および場合によっては他の商用Unices)に対して正確であることを忘れないでください。Linuxでは、straceはシステムコールトレーサーであり、動作および出力はSolarisのトラスまたはHP-UXのtuscに似ています。
ジェームズF

1
Linuxでstraceについて説明しました。
デビッドパシュリー

8

トレースダンプ

Tracedumpは単一のアプリケーションIPパケットスニファーであり、単一のLinuxプロセスのすべてのTCPおよびUDPパケットをキャプチャします。

ダウンロードと説明はこちら:http : //mutrics.iitis.pl/tracedump


1
これが正しい答えになるはずです。
h0tw1r3

4

Wiresharkをお試しください-コマンドは tshark

  • tsharkでは、インターフェイスからキャプチャされたトラフィックのフィルターを選択できます
  • debian lsofなどの他のユーティリティを使用して、目的のアプリケーションによって行われた通信の種類を識別します。

または、LSOFが本当に必要ですか?


プロセスに関連付けられているすべての通信を動的にフィルタリングし続けるツールはないと思います。ただし、次のようなツールを使用してプロセスの通信を追跡してみlsofて、システムで実行されている他のすべてのトラフィックからそのプロセスの通信を分離できる適切なフィルターを取得したら、正しいキャプチャを取得できます。

たとえば、wget通常、宛先IPアドレスは他のプロセス関連トラフィックとは異なります。skype宛先ポート範囲のようなものを使用しても、通常はインスタンスに対して固定されています。


これは不確実性の原理に少し似ています。通常は知ることができるものを(フローの識別されたグループにフィルタリングをスニファで)通信パスのセットを通過している、またはどこ異なる通信リンクは、(lsofので)行われています。

アプリケーションで両方を実行できるかどうかを知りたいです。実現可能だと思う。しかし、それを行うツールはまだありません。


lsofは素晴らしいですが、私はむしろそれが何をして/送信/受信しているかをたいです。
ローリー

4

フィルター式の使用方法を学びます。

これは、あなたが求めている派手なトレースは行いませんが。

これにより、キャプチャから「IRCのような紛らわしいもの」のほぼすべてを削除できます。

さらに、将来のクイックリファレンスのためにフィルター構文を知ることは非常に便利です。


2

特にWebブラウザ/ Webページの場合、Firefox用のFirebugプラグインのようなものが、探している情報の一部を提供する場合があります:http : //getfirebug.com/net.html

より一般的なアプリケーションの場合は、netstatを使用してアプリケーションで使用されるポートを特定し、次にフィルターを使用してWireshark / tshark / dtraceを特定し、そのトラフィックのみをキャプチャする必要があります。あなたが探していた一行の答えではありません...


1

一つのアイデアは、VMWareを試してみてください

-setup A VM
-configure VMは、特定のインターフェイスに使用すること
ホスト(その中間者攻撃など)から、そのインターフェイス上-sniffを

そのVMで実行されているネットワークアプリケーションを分離すると、答えが得られる可能性があります

より理想的なソリューションは、VMWareがやり取りするインターフェイスをどのように選択するかを指定する方法に関して、VMWareが行うことを行うことだと思います。その魔法は、使用するカーネルモジュール、この場合はおそらくvmnetカーネルモジュールにあると思います。

私の知る限り、アプリケーションはどのインターフェイスについて話しているかを認識していません。これは仕様によるものだと思います。彼らはそのようなことを心配する必要はないはずです。

さらに、
おそらくプログラムがすでに存在しているのかもしれませんが、わかりません。しかし、1つが書かれていれば、nettrace(たとえば)と呼ぶことができ、Usageは次のようになります。

nettraceプログラムインターフェイス

次に、使用するインターフェイスをスニッフィングし、実際のインターフェイスにルートを追加します(おそらく自動的に行います)


はい、可能です。しかし、それを行うためのシンプルで迅速なツールがあれば素晴らしいでしょう。
ロリー

たぶん、この単純なツールの時間ですか?それほど難しく、おそらくvmnet modが良い出発点になるのではないかと思います(ライセンスの問題があるかどうかはわかりませんが)。おそらく(ハック)vmnet modを使用するだけです。私はこのような質問に頻繁に興味があることを知っています。
rev

1

あなたがその時点でGoogleに接続しようとしているボックス上の唯一の人であると仮定すると、私はこのような何かがトリックを行うべきだと思います:

tcpdump -w <outfile> -i <interface> tcp dst host www.google.com and dst port 80

ボックスでGoogleに接続しようとしている接続が自分だけでない場合、接続元のIP /ポートを特定できる場合は、src port / src ipも指定できます。

srcポートを識別することは、使用するクライアントで指定できない限り問題になる可能性があります。wgetでできるかどうかはわかりません。

srcとdstの両方のポートを指定できると強く思う netcatので、もしそれが本当にグーグルであるなら、netcatを通してGETを(手動で)行うことができます。

もちろん、manページには詳細が記載されています


1

tcpdumpのマニュアルページおよび多くのWebサイトには、フィルターの詳細な例が記載されています。また、tcpdumpフィルター式のオンラインリポジトリもいくつかあります。ネットワークトラフィック(ソース、宛先、ポート、プロトコルなど)について、プログラムが生成しているもの以外の何かを知っていると仮定すると、夢見ることができるほとんどすべてのことができるはずです。

サーバーまたはヘッドレスボックスで作業している場合は、いつでもtcpdumpでダンプファイルを書き込んでからワークステーションのWiresharkで開き、高度なフィルタリングとグラフィカルインターフェイスを取得できます。


Erm、tcpdumpコマンドに切り替えると、トラフィックを生成する単一のアプリケーションに制限されますか?
ミラノバブシュコフ09年

1

たぶん、このスクリプトはtsharkコマンドに適切な変更を加えて、あなたが望むことをするでしょう:

#!/bin/bash

# Start tshark in the background before we run the commsnd to be sniffed.
# Add more options to tshark, as appropriate to your command....
setsid tshark  -w dump -i eth0 tcp port 8080 >/dev/null 2>&1  &

sleep 2

wget www.google.com

# tshark keeps running if you don't kill it. 
# This kills all other tsharks that may be running.
pkill -9 tshark

後でダンプファイルを読み取ります。

tshark -r dump

ポート8080をキャプチャしていますが、ポート80でトラフィックを生成しています。これは、あなたが意図していることをまったく行いません。
ジェームズF

ジェームス:私のプロキシは8080に接続します。それがスクリプトの実行方法です。この投稿のために80を変更する必要がありました。
今ではない

0

Dtraceはこれを許可するはずですが、まだLinuxに組み込まれたかどうかはわかりません。

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