tcpdump、tee、scpの実行

tcpdump、tee、scpの実行

次のコマンドを実行しようとしています。

$ tcpdump -l -X -i eth1 -n tcp port <port> | tee capture.txt | \
       scp capture.txt  [email protected]:/home/checker/
  1. tcpdump -l -X -i eth1 -n tcp port <port>

    ステップ1では、「-l」を使用して標準出力ラインをバッファリングし、パケットが到着したときに各パケットに書き込むことができるようにパケットをキャプチャします。

  2. tee capture.txt

    ステップ2 man tee:「ティーユーティリティは標準入力を標準出力にコピーし、0個以上のファイルにコピーを作成します」

  3. scp capture.txt root@<remote-IP>:/home/

    手順3では、Capture.txtファイルをリモートホストに送信します。

質問

ステップ1と2のみを実行すると、すべてのパケットが指定されたポートでキャプチャされます。ただし、ステップ3も使用すると、capture.txtにはすべてのパケットが含まれていません(数個のみ)。数分前は正常に実行されたので残念です!

ここに問題がありますか?

ベストアンサー1

このteeコマンドは、データを受信すると出力ファイルにデータを書き込みますが、scpファイルはただちに一度だけコピーされます。パイプライン内のすべてのコマンドは同時に(またはほぼ同時に)実行されるため、出力されるパケットの数が少なくてもまったくありません。キャプチャ.txtファイルがコピーされる前のファイルですscp

必要なことを行う方法はいくつかあります。

リモートホストからいくつかのパケットをコピーし、tcpdump完了したらファイルをリモートホストに転送したい場合は、このオプションを使用してその数のパケットをキャプチャしてから終了できます-c。コマンドが完了した後に実行されるように、セミコロンを使用してtcpdumpコマンドをパイプから切り離します。scptcpdumptee

tcpdump -l -c 10  | tee  /tmp/capture.txt; scp /tmp/capture.txt root@remotehost:/tmp

または、パケットをリアルタイムで表示してリアルタイムにコピーするには、次のコマンドでパケットteeを/ dev / ttyに出力してパケットを確認し、パイプしてsshリモートホスト上のファイルに書き込むことができます。

tcpdump -l   | tee /dev/tty | ssh root@remotehost "cat > /tmp/capture.txt"

-cここにオプションがない場合、tcpdumpはユーザーが終了するまで実行されます。

ローカルおよびリモートの Capture.txt ファイルにパケットを保存するには、次のteeコマンドを使用します。

tcpdump -l   | tee /tmp/capture.txt | tee /dev/tty | ssh root@remotehost "cat > /tmp/capture.txt"

おすすめ記事