我想捕获 tcpdump 的输出并将其用作第二个命令的输入。顺便说一下,我不想使用 pcap 格式!
我试过
sudo tcpdump -q ip > ./out.txt
Run Code Online (Sandbox Code Playgroud)
当我查看文件时,我看到整个 STDOUT 一直被写入文件,但我希望文件只会被新内容覆盖。写入终端时是否所有 STDOUT 都被缓冲或清除?
这行得通吗?
sudo tcpdump -q ip | my_command
Run Code Online (Sandbox Code Playgroud)
要始终用每个新行覆盖文件tcpdump:
sudo tcpdump -l -q ip | awk '{system("echo " $0 " > out")}'
Run Code Online (Sandbox Code Playgroud)
将输出用于其他命令,例如awk
$3= 仅第三列
sudo tcpdump -l -q ip | awk '{print $3}'
Run Code Online (Sandbox Code Playgroud)过滤tcp
sudo tcpdump -l -q ip | awk '/tcp/ {print $0}'
Run Code Online (Sandbox Code Playgroud)或者组合:
sudo tcpdump -l -q ip | awk '/tcp/ {"echo " $0 " > out"}'
Run Code Online (Sandbox Code Playgroud)从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
Run Code Online (Sandbox Code Playgroud)