2

我有这样的 tcpdump

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

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

4

1 回答 1

1

是的,tcpdump 将附加信息添加到文件中。

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

此外,每个数据包都有一个 16 字节的报头,给出了数据包的到达时间戳、数据包的长度以及捕获的数据包数据的字节数。这意味着您需要从长度中减去 16*{number of packet} - 但获取数据包数量的唯一方法是读取文件,因此您无法仅通过查看文件大小!

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

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

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

于 2012-09-04T19:45:13.427 回答