私は自分の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"などを試してみましたが、どうやってそれらを取得するのかは明らかではありません。
はい、おそらくこれを行うためにパイプで接続された一連のunixコマンドをまとめることができますが、次回のために覚えるのはそれほど簡単ではありません:)
あなたがこれをする正確なコマンドラインの簡単な例があるならば、それは私が欲しいものです。
更新:
コメントで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
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
Wireshark を試してください。 LinuxとWindowsの両方を対象とした優れたプロトコルアナライザです。
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を調整するための表現を再生します。
ngrep
はこれに非常にいいです。これはBPF文字列とオプションの文字列を使ってパケット内を検索し、次にパケットの内容をかなり便利な形式でscreenにダンプします。オプションでpcap_dumpファイルにダンプすることもできます。これは後でWiresharkで詳しく調べることができます。
Chaosreader を見てください。それはあなたが要求するよりも少しだけ多くそして少し違うことをしますが、あなたはたぶんあなたが望むことをするためにそれのコードを修正することができます。