1

tcpdump の動作には非常に驚いています。次のようなエコーを行う簡単なコードを書きました。

ながら (n)

{

n = fread(buf, 16, 1, stdin);

printf("%s", buf);

fflush(stdout);

}

そして、私は次のようなことをします

$ tcpdump | ./EchoTest

エコー出力で多くの tcpdump パケットが抑制され、ある程度まで抑制されます。なぜそれが起こるのですか?? のようなもの

$ 猫ファイル | ./EchoTest

また

$ テール -f ファイル | ./EchoTest

("$ echo "blabla" >> ファイル付き)

完璧に動作し、すぐに出力が得られます。tcpdump がパイプラインで出力されるように強制する方法を知っている人はいますか??

4

2 に答える 2

2

tcpdumpマニュアルページから:

-l

stdout行をバッファリングします。キャプチャ中にデータを表示したい場合に便利です。例えば、

'' tcpdump -l | teedat''または''tcpdump -l> dat&tail -fdat''。

結論:の出力はバッファリングされます-各パケット/行をすぐに出力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 に答える