web-dev-qa-db-ja.com

LinuxでTCPトラフィックデータを盗聴する最も簡単な方法は何ですか?

私は自分のLinuxマシン上のどのインターフェース上でも、すべてのTCPデータ(TCPヘッダーやその他のものではない)をすべて表示する簡単な方法が欲しいのです。

例えば、私がするならば、私は魔法のような命令が欲しい:

magic_commmand_I_want port=1234

それから私のマシンのポート1234で待機しているサーバーがあり、誰かがしたなら:

echo hello | nc localhost 1234
# Note: "nc" (aka "netcat") is a simple tool that sends data to a Host/port

それから魔法のコマンドはただプリントアウトするでしょう:

hello

"tcpdump"、 "Ethereal"、 "tethereal"、 "tshark"などを試してみましたが、どうやってそれらを取得するのかは明らかではありません。

  • iPアドレスやその他のメタデータを表示しない
  • 送信されている「データ」のみを表示し、個々のパケットとそのヘッダーは表示しません。
  • データを16進数ではなく、パケットオフセットマーカーを付けずにそのまま印刷する
  • sniff all ネットワークトラフィック( eth0 または eth1 またはにあるかどうか) ] lo など

はい、おそらくこれを行うためにパイプで接続された一連のunixコマンドをまとめることができますが、次回のために覚えるのはそれほど簡単ではありません:)

あなたがこれをする正確なコマンドラインの簡単な例があるならば、それは私が欲しいものです。

77
Dustin Boswell

更新:

コメントでMichalによって指摘されたように:tcpflowバージョン1.3から-eオプションはスキャナー名を指定するために使われます。そのため、エラー「無効なスキャナ名 '8983'」が表示されます。正しいコマンドは

Sudo tcpflow -i any -C -J port 1234

(また、最新リリースでは-J-gに変更されました)


" tcpflow "を教えてくれたyvesに感謝します。これがコマンドラインです。

tcpflow -i any -C -e port 1234  # as root, or with Sudo

これは私が欲しいものすべてをします

  • 入ってくるデータをバイト単位で表示します
  • 他のメタデータを表示しません
  • すべてのインターフェースをリッスンします(したがって、マシンの内部と外部から来るデータを取得します)

"-C"はファイルの代わりにコンソールにダンプするように伝えます。 "-e"は色を有効にするので、client-> serverとserver-> clientは視覚的に区別されます。

私は単純にやってtcpflowをインストールしました

Sudo apt-get install tcpflow
104
Dustin Boswell

socatはあなたが求めているツールです。それはプロキシとして振る舞うことができます:

$socat -v TCP-LISTEN:4444 TCP:localhost:1234
hello

その場合、アプリケーションは1234に直接接続するのではなく、ポート4444に接続する必要があります。

-vオプションはsocatが受け取ったすべてのものを標準エラー(stderr)に出力するためのものです。

更新:

Socatがあなたのマシンで利用できない場合でも、netcatを使ってそれをエミュレートすることができます。

$netcat -l -p 4444 | tee output_file | netcat localhost 1234

警告:このオプションは単方向です。 2番目のnetcatインスタンスはあなたのサーバーから標準出力への応答を表示します。あなたはまだそうすることができます:

$mkfifo my_fifo
$netcat -l -p 4444 < my_fifo | tee output_file | netcat localhost 1234 > my_fifo
29
yves Baumes

Wireshark を試してください。 LinuxとWindowsの両方を対象とした優れたプロトコルアナライザです。

20
Kevin Boyd

tcpflowはあなたが望むものです。 manページから抽出します。

説明
tcpflowはTCP connections(フロー)の一部として送信されたデータをキャプチャし、プロトコル分析に便利な方法でデータを保存するプログラムです。 tcpdump(4)のようなプログラムはネットワーク上で見たパケットの要約を表示しますが、通常実際に送信されているデータを格納しません。対照的に、tcpflowは実際のデータストリームを再構築し、後で分析するために各フローを別々のファイルに格納します。 tcpflowはTCPシーケンス番号を理解しており、再送信や順序外配信に関係なくデータストリームを正しく再構築します。

tcpflowは、キャプチャしたすべてのデータをフォームの名前を持つファイルに保存します。

192.168.101.102.02345-010.011.012.013.45103

上記のファイルの内容は、ホスト192.168.101.102のポート2345からホスト10.11.12.13のポート45103に送信されたデータです。

アプリケーションアプリからサーバーへの接続を設定します。接続が確立され実行されているとき、tcpflowはまだそこからデータを取得することができます。

$ Sudo tcpflow -i lo port 5555
tcpflow[3006]: listening on lo

すべてのデータは127.000.000.001.48842-127.000.000.001.05555という名前のファイルに保存されます。

オプション-Cを使って標準出力にリダイレクトすることもできます。マニュアルページを読んで、tcpflowにキャプチャさせたいpaquetsを調整するための表現を再生します。

13
yves Baumes

ngrepはこれに非常にいいです。これはBPF文字列とオプションの文字列を使ってパケット内を検索し、次にパケットの内容をかなり便利な形式でscreenにダンプします。オプションでpcap_dumpファイルにダンプすることもできます。これは後でWiresharkで詳しく調べることができます。

2
hobbs

Chaosreader を見てください。それはあなたが要求するよりも少しだけ多くそして少し違うことをしますが、あなたはたぶんあなたが望むことをするためにそれのコードを修正することができます。

0
Andrew Y