我对tcpdump的行为感到非常惊讶。我编写了简单的代码来做回声:
while(n)
{
n = fread(buf,16,1,stdin);
printf(“%s”,buf);
fflush(stdout中);
}
然后我做了类似
的事情$ tcpdump | ./EchoTest
我在回声输出中得到了很多tcpdump数据包被抑制,直到有一些数量。为什么会这样?
之类的东西$ cat file | ./EchoTest
或
$ tail -f file | ./EchoTest
(使用“$ echo”blabla“>>文件)
完美运作,我立即获得输出。有人知道如何强制tcpdump在管道中执行它的输出吗?
答案 0 :(得分:1)
<强> -l </强>
使stdout行缓冲。如果您想在捕获数据时查看数据,则非常有用。如,
''tcpdump -l | tee dat''或'tcpdump -l&gt;数据&amp; tail -f dat''。
底线:tcpdump
的输出被缓冲 - 你需要-l
选项让它立即输出每个数据包/行。
答案 1 :(得分:1)
可能tcpdump只有你的数据包需要处理更多的流量,而且通常会减慢它的速度以及@ thkala的建议正在解决。使用-n
选项加速它可以加快输出速度。
-n Don't convert addresses (i.e., host addresses, port numbers, etc.) to names.