2009-08-13 22:44:50 +0000 2009-08-13 22:44:50 +0000
82
82

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

私は、Linuxボックス上の任意のインターフェイス上を通過するすべてのTCPデータ(TCPヘッダや他の何かではなく)を表示する簡単な方法が欲しいのです。

magic_commmand_I_want port=1234

とすると、サーバが存在していた場合には

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

そうすれば、私のマシン上にポート1234をリッスンしているサーバがあって、誰かがリッスンしていたとしたら、次のような魔法のコマンドが欲しいです。

hello

とすると、魔法のコマンドが出力されます。

0x1&

“tcpdump"、"ethereal"、"tethereal"、"tshark” などを試してみましたが、どうやって実行させるかは明らかではありません。

  • IP アドレスやその他のメタデータを表示しない
  • 送信された「データ」のみを表示し、個々のパケットとそのヘッダは表示しない
  • データをそのまま表示し、16 進数で表示せず、パケットオフセットマーカーで表示しない
  • すべてのネットワークトラフィックをスニッフィングする (それが eth0 上か eth1 上か lo 上かなど)

  • すべてのネットワークトラフィックをスニッフィングする (それが eth0 上か eth1 上か lo 上かなど)。

はい、おそらくこれを行うための一連の unix コマンドをパイプでつなぐことができるでしょうが、次回のために覚えておくのは簡単ではありません :)

もしこれを正確に行うコマンドラインの簡単な例があれば、それが欲しいです。

回答 (7)

109
109
109
2009-08-14 17:05:54 +0000

更新:

ミハエルさんがコメントで指摘されている通りです。tcpflow バージョン 1.3 からは、スキャナ名を指定するために -e オプションが使用されています。そのため、"Invalid scanner name ‘8983’“というエラーが表示されます。正しいコマンドは

sudo tcpflow -i any -C -J port 1234

(最新のリリースでは -J-gに変更されています)


Thanks to yves for the pointing me to tcpflow "です。

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

これは私が望むすべてのことをしてくれます

  • データが入ってきたときにバイト単位で表示します
  • 他のメタデータは表示しません
  • すべてのインターフェイスをリッスンします (つまり、マシンの内部と外部からのデータをキャプチャします)

-C“はファイルではなくコンソールにダンプするように指示しています。-e」は、client->serverとserver->clientを視覚的に区別するために、色を有効にしている。

sudo apt-get install tcpflow
``` をするだけで、tcpflowをインストールした。
30
30
30
2009-08-13 22:48:27 +0000

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

注意点: このオプションは一方向性があります。この場合でも、以下のようにすることができます。

$mkfifo my_fifo
$netcat -l -p 4444 < my_fifo | tee output_file | netcat localhost 1234 > my_fifo
20
20
20
2009-08-13 22:47:06 +0000
13
13
13
2009-08-14 15:04:28 +0000

tcpflowはあなたが望むものです。manページより抜粋。

DESCRIPTION **tcpflow は TCP コネクション (フロー) の一部として送信されたデータをキャプチャし、プロトコル解析やデバッグに便利な方法でデータを保存するプログラムです。対照的に、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.000.001.48842-127.000.000.001.05555という名前のファイルに保存されます。

オプション -Cs を使用して標準出力でこれをリダイレクトすることもできます。マニュアルページを読んで、tcpflow にキャプチャさせたいパケを調整するための式で遊んでみてください。

2
2
2
2009-08-13 23:15:48 +0000

ngrep はこのために非常に便利です。これはBPF文字列と、パケット内で検索するためのオプションの文字列を取り、パケットの内容をかなり便利なフォーマットでスクリーンにダンプします。また、オプションで pcap_dump ファイルにダンプします。

0
0
0
2009-08-13 23:08:00 +0000
-1
-1
-1
2009-08-13 22:47:31 +0000

例えば tcpdump のラッパーを書いて、冗長な情報をすべて削除することができるかもしれません。

関連する質問

6
10
3
5
8