tcpdumpからの出力をキャプチャする方法

tcpdumpからの出力をキャプチャする方法

tcpdump からの出力をキャプチャし、それを 2 番目のコマンドの入力として使用したいと思います。ところで、pcap 形式は使用したくありません。

私は試した

sudo tcpdump -q ip > ./out.txt

ファイルを見ると、常に STDOUT 全体がファイルに書き込まれているのがわかりましたが、ファイルは新しいコンテンツのみで上書きされると思っていました。ターミナルに書き込まれるときに、すべての STDOUT がバッファリングされるか、クリアされるのでしょうか?

  • STDOUT から部分的な更新のみを読み取る方法はありますか?
  • tcpdump からの出力を他の cmd に継続的にリダイレクトするにはどうすればよいですか?

これは機能しますか?

sudo tcpdump -q ip | my_command

答え1

新しい行ごとに常にファイルを上書きするにはtcpdump:

sudo tcpdump -l -q ip | awk '{system("echo " $0 " > out")}'

出力を他のコマンドに使用するには、例えばawk

  • $3= 3列目のみ

    sudo tcpdump -l -q ip | awk '{print $3}'
    
  • フィルターtcp

    sudo tcpdump -l -q ip | awk '/tcp/ {print $0}'
    
  • または組み合わせ:

    sudo tcpdump -l -q ip | awk '/tcp/ {"echo " $0 " > out"}'
    

からman tcpdump

   -l     Make  stdout  line  buffered.
          Useful if you want to see the data while capturing it.
          E.g.,
                 tcpdump -l | tee dat
          or
                 tcpdump -l > dat & tail -f dat

関連情報