我使用 tcpdump 捕获从本地 rsyslog 服务到 syslog 服务器的数据包,但是,当我在 tcpdump 中尝试不同的命令(带/不带 dst 选项)时,显示的结果有延迟。
预期/期望的行为:
tcpdump -n -e -i any -A | grep hello # without dst option
tcpdump -n -e -i any dst 10.8.8.3 -A | grep hello # with dst option
上述两个命令应同时或以非常短的延迟显示数据包。
实际行为:
带 dst 选项的命令tcpdump -n -e -i any dst 10.8.8.3 -A | grep hello
显示的数据包延迟长达 20 秒,这让我误认为数据包没有发送成功。
command1立即捕获数据包
command2 无法立即捕获数据包。大约20秒后,数据包终于显示在屏幕上。
附加信息:
- Debian 4.9.189-3+deb9u2 (2019-11-11) x86_64 GNU/Linux
- tcpdump 版本 4.9.3
- libpcap 版本 1.8.1
答案1
从tcpdump(8)
(选择比OP版本稍旧的版本,但任何较新的版本都可以):
-l
使标准输出行缓冲。如果您想在捕获数据时查看数据,这很有用。例如,
tcpdump -l | tee dat
或者
tcpdump -l > dat & tail -f dat
[...]
-U
与其行为类似-l
,但它会导致输出“数据包缓冲”,[...]
因此,只要您需要“实时”显示,就-l
添加即可。tcpdump