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