我有像这样的tcpdump
sudo tcpdmp tcp -n -i eth0 -w test.dmp
我想计算通过eth0的tcp字节数。我使用tcpdump捕获所有包,如上所示。文件大小是否等于字节数或tcpdump将其他信息添加到转储文件中?
答案 0 :(得分:1)
是的,tcpdump会在文件中添加其他信息。
它(当前)只以pcap格式写入,这意味着文件开头有一个24字节的标题,为文件中的数据包提供链接层标题类型等信息,所以你要做的第一件事就是d需要做的是从文件大小中减去24。
此外,每个数据包都有一个16字节的标头,给出数据包的到达时间戳,数据包的长度以及捕获的数据包数据的字节数。这意味着您需要从长度中减去16 * {数据包数} - 但获取数据包数量的唯一方法是读取文件,因此无法获取数字通过查看文件大小的字节数!
另请注意,某些版本的tcpdump not 默认为“快照长度”为0,因此捕获的数据包数据的字节数可能小于数据包的字节数网络。
因此,你应该做的是编写一个程序(使用libpcap,因为它已经知道pcap格式,你不必编写自己的代码来理解它),它读取所有数据包并加上“数据包“字段(它是len
结构中的struct pcap_pkthdr
字段; 不使用caplen
,因为这是捕获的数据包数据的字节数)所有数据包的值。
你说eth0
,所以链路层头类型可能是以太网,例如,没有无线电元数据,如果你在Wi上以监控模式捕获的情况可能就是这种情况-Fi适配器。在链路层标头中有额外元数据的情况下,您需要减去它。