我想捕獲 tcpdump 的輸出並將其用作第二個命令的輸入。順便說一句,我不想使用 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
= 僅第三列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