1

我对 tcpdump 的行为感到非常惊讶。我写了简单的代码来做回声,比如:

而 (n)

{

n = fread(buf, 16, 1, 标准输入);

printf("%s", buf);

fflush(标准输出);

}

然后我做类似的事情

$ tcpdump | ./EchoTest

我在回显输出中得到了很多 tcpdump 数据包,直到其中一些数据包被抑制。为什么会发生??像

$ 猫文件 | ./EchoTest

或者

$ 尾 -f 文件 | ./EchoTest

(带有“$ echo "blabla" >> 文件)

完美运行,我立即得到输出。有人知道如何强制 tcpdump 在管道中输出它吗?

4

2 回答 2

2

tcpdump手册页

-l

使标准输出行缓冲。如果您想在捕获数据时查看数据,这很有用。例如,

''tcpdump -l | tee dat'' 或 ''tcpdump -l > dat & tail -f dat''。

底线: 的输出tcpdump被缓冲 - 您需要-l选择让它立即输出每个数据包/行。

于 2013-01-01T18:25:27.870 回答
1

tcpdump 可能比仅处理数据包的流量要多得多,通常会减慢它的速度以及@thkala 的建议正在解决。用-n选项喂它会加速它的输出。

-n     Don't convert addresses (i.e., host addresses, port numbers, etc.) to names.
于 2013-01-01T18:28:49.540 回答