2013-01-01 28 views
1

我對tcpdump的行爲感到非常驚訝。我寫簡單的代碼做這樣的回波:帶管線的Tcpdump變慢

而(正)

{

N =的fread(BUF,16,如圖1所示,標準輸入);

printf(「%s」,buf);

fflush(stdout);

}

,然後我做了什麼樣

$ tcpdump的| ./EchoTest

我得到了抑制,直到有一定量的回聲輸出大量tcpdump的包。爲什麼會發生? 之類的東西

$貓文件| ./EchoTest

$尾-f文件| ./EchoTest

(以「$回聲‘布拉布拉’>>文件)

作品完美,我得到的輸出瞬間。是否有人知道如何強制tcpdump的做它的輸出管道,因爲它appeares ??

回答

1

tcpdump manual page

-l

使stdout行緩衝。如果你想在捕捉數據的時候看到數據,這很有用。例如,

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

底線:的tcpdump輸出緩衝 - 你需要的-l選項,它立即輸出每個包/線。

1

可能tcpdump比你的數據包只有更多的流量來處理,通常會減慢它的速度,以及@ thkala的建議正在解決。用-n選項進行加速可以加快其輸出。

-n  Don't convert addresses (i.e., host addresses, port numbers, etc.) to names.