tcpdump 正在缓冲传入数据包并存储到 pcap 文件中

问题描述 投票:0回答:1

我有两个虚拟机通过 10G 网卡相互连接,现在在一个虚拟机上,我正在使用 libpcap 以连续流的方式播放 pcap 文件中的数据包,在虚拟机的另一端,我正在使用 tcpdump 捕获传入数据包、数据包间隔不是恒定的,但看起来正在缓冲传入数据包的数量,然后附加时间戳,写入 pcap 文件

输入:16包连续流 预期输出:16 个数据包,数据包间隔不断增加

使用的tcpdump命令:

sudo tcpdump -i eth0 --立即模式-w tcp_replay_capture_timestamp1.pcap --时间戳精度纳米

现实: 在 5-6 个传入数据包之后,数据包将以较小的时间戳间隔写入 pcap 文件 enter image description here

c networking libpcap packet-capture network-traffic
1个回答
0
投票

现实:在 5-6 个传入数据包之后,数据包会以较小的时间戳间隔写入 pcap 文件

涉及多个缓冲区。

一是抓包机制中的缓冲区;因为这可能是 Linux(根据设备名称“eth0”),

--immediate-mode
应该防止数据包在超时情况下被缓冲和批量传送。

另一个是标准I/O库机制完成的缓冲。 Tcpdump 使用 libpcap 写入捕获文件,libpcap 使用标准 I/O 库例程

fwrite()
写入使用
fopen()
打开的流,并且该机制缓冲数据,将其写入捕获文件(使用
write() 
当标准 I/O 缓冲区(大小可能至少在 1KB 到 4KB 之间,甚至可能更大)时调用)。

要使 tcpdump 刷新每个数据包的缓冲区,以便数据包到达时数据立即出现在文件中,请使用

-U
标志。如果 tcpdump 足够新来支持该标志,并且如果 libpcap 足够新来支持刷新缓冲区,那么这应该会导致数据包一到达就被写入文件。

© www.soinside.com 2019 - 2024. All rights reserved.