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
(コマンドの帯域幅を制限)
私が知っていることは何もありませんが、理論的には同様のものを取得することは難しくありません。 Straceは、ネットワーキングシスコールをインターセプトするために使用できます。
# strace -f -e trace=network -s 10000 /usr/bin/command arguments
これにより、カーネルとプロセスの間で送信されるデータに関する情報が得られます。 straceの出力は、望みどおりではありません。ただし、straceはptrace syscallを使用してシステムコールをインターセプトします。データをもう少し便利に出力するプログラムを書くことができるかもしれません。
あるいは、Niceの便利なソケットをインターセプトし、syscallをバインドしてリッスンすることもできます。これらの呼び出しでptraceとlibpcapを使用して、新しいソケットが開かれるたびにキャプチャフィルターを動的に変更する小さなプログラムを書くことは可能かもしれません。
Tracedump
Tracedumpは、単一のLinuxプロセスのすべてのTCPおよびUDPパケットをキャプチャする単一のアプリケーションIPパケットスニファです。
ここからダウンロードして説明: http://mutrics.iitis.pl/tracedump
Wiresharkを試してください-コマンドは tshark
になります
または、本当にLSOFが必要ですか?
プロセスに関連付けられたすべての通信を動的にフィルタリングし続けるツールはないと思います。ただし、lsof
などのツールを使用してプロセスの通信を追跡することもできます。システムで実行されている他のすべてのトラフィックからそのプロセスの通信を分離できる適切なフィルターを取得すると、正しいキャプチャを取得できます。
たとえば、wget
を使用すると、通常、宛先IPアドレスは他のプロセス関連のトラフィックとは異なります。 skype
のようなものを受け取ったとしても、宛先ポートの範囲は通常、インスタンスに対して固定されています。
これは、不確実性の原則に少し似ています。あなたは通常知ることができます 何 一連の通信パスを通過している(識別されたフローのグループにスニファフィルタリングが適用されている)、または どこ 異なる通信リンクが作成されています(lsofを使用)。
アプリケーションに対して両方を実行できるかどうかを本当に知りたいです。実現可能だと思います。しかし、それを行うツールはまだありません。
フィルター式の使い方を学びます。
これはあなたが求めている空想的なトレースのことはしませんが。
キャプチャから「IRCのような混乱するもの」のほぼすべてを削除できます。
さらに、将来のクイックリファレンスのためにフィルター構文を知ることは非常に便利です。
具体的には、Webブラウザー/ Webページの場合、FirefoxのFirebugプラグインのようなものが、探している情報の一部を提供する可能性があります。 http://getfirebug.com/net.html
より一般的なアプリケーションの場合、netstatを使用してアプリケーションが使用するポートを特定し、そのトラフィックのみをキャプチャするフィルターを使用してWireshark/tshark/dtraceを実行する必要がある場合があります。あなたが探していた一行の答えではありません...
VMWareをお試しください
-vmのセットアップ
-特定のインターフェースを使用するようにそのvmを構成します
-ホストからのそのインターフェースのスニフ(中間者攻撃のようなもの)
その仮想マシンで実行されているネットワークアプリケーションを分離すると、答えが得られる可能性があります
より理想的な解決策は、VMWareがやり取りするインターフェースの選択方法をどのように指定するかという点で、VMWareが行うことです。その魔法は、使用しているカーネルモジュール、この場合はおそらくvmnetカーネルモジュールにあると思います。
私の知る限りでは、アプリケーションはどのインターフェースを使用するかを認識していません。これは設計によるものだと思います。彼らはそのようなことを心配する必要はありません。
さらに、
おそらくプログラムはすでに存在しているのかもしれません。しかし、もしそれが書かれていれば、それをnettrace(たとえば)と呼ぶことができ、Usageは次のようになります。
nettraceプログラムインターフェイス
次に、それが使用するインターフェースをスニッフィングし、実際のインターフェースにルートを追加します(おそらく自動的に行われます)。
その時点でGoogleに接続しようとしているのがあなただけであると仮定すると、私はこのようなことがうまくいくはずだと思います:
tcpdump -w <outfile> -i <interface> tcp dst Host www.google.com and dst port 80
ボックスでgoogleへの接続を試みる唯一の接続ではない場合、接続元のIP /ポートを特定できる場合は、srcポート/ src ipも指定できます。
Srcポートの識別は、使用しているクライアントで指定できない限り、問題になる可能性があります。 wgetでできるかどうかはわかりません。
netcat
でsrcとdstの両方のポートを指定できるのではないかと私は強く思います。そのため、本当にGoogleである場合は、netcatを介して(手動で)GETを実行できます。
もちろん、manページはあなたに詳細を与えるでしょう
Tcpdumpのマニュアルページと多くのWebサイトには、フィルターの詳細な例が示されています。tcpdumpフィルター式のオンラインリポジトリもいくつかあります。ネットワークトラフィック(送信元、宛先、ポート、プロトコルなど)について、どのプログラムが生成しているのかを知っていると想定すれば、夢のようなほぼすべてのことを実行できます。
サーバーまたはヘッドレスボックスで作業している場合は、tcpdumpでダンプファイルを作成し、ワークステーションのWiresharkで開いて、高度なフィルタリングとグラフィカルインターフェイスを利用できます。
たぶん、このスクリプトは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
Dtraceはこれを許可するはずですが、Linuxに完全に組み込まれたかどうかはまだわかりません。