如何用tcpdump计算通过网络的字节数



我有这样的tcpdump

sudo tcpdmp tcp -n -i eth0 -w test.dmp

我想计算通过eth0的tcp字节数。如上所述,我使用tcpdump捕获了所有的包。文件大小等于字节数还是tcpdump向转储文件中添加附加信息?

是的,tcpdump向文件中添加了附加信息。

它(目前)只以pcap格式写入,这意味着在文件的开头有一个24字节的标头,提供文件中数据包的链接层标头类型等信息,因此您需要做的第一件事是从文件的大小中减去24。

此外,每个数据包都有一个16字节的报头,给出数据包的到达时间戳、数据包的长度和捕获的数据包数据的字节数。这意味着你需要从长度中减去16*{数据包数量},但获得数据包数量的唯一方法是读取文件,所以你不能通过查看文件大小来获得字节数量!

还要注意的是,tcpdump的某些版本没有默认"快照长度"为0,因此捕获的数据包数据字节数可能小于网络上的数据包字节数。

因此,您应该做的是编写一个程序(使用libpcap,因为它已经知道pcap格式,您不必编写自己的代码来理解它),读取所有数据包,并将所有数据包的"数据包长度"字段(它是struct pcap_pkthdr结构中的len字段;不要使用caplen,因为这是捕获的数据包数据的字节数)值相加。

您说的是eth0,因此链路层标头类型可能是以太网,并且例如,没有无线电元数据,如果您在Wi-Fi适配器上以监视器模式捕获,则可能会出现这种情况。在链接层标头中有额外元数据的情况下,您需要减去这些元数据。

最新更新