我想捕获 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