libpcap 配置的捕捉长度与实际捕获长度不匹配

libpcap 配置的捕捉长度与实际捕获长度不匹配

我有几个 pcap 文件,Wireshark 报告的捕获长度大于实际捕获长度。差异是 10 个字节,我不明白为什么它会报告这个更高的数字。

file报告的值与Wireshark在统计->摘要对话。

$> file out_20140207162250.pcap
out_20140207162250.pcap: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 100)

我可以使用 tshark 为我提供捕获长度短于数据包长度的数据包的捕获长度,以查看实际大小。

$> tshark -r "out_20140207162250.pcap" -R "frame.cap_len < frame.len" -Tfields -eframe.cap_len | sort | uniq
tshark: The file "out_20140207162250.pcap" appears to have been cut short in the middle of a packet.
90

使用一个简单的 C 程序查看该文件,我可以看到其中的snaplen确实pcap_file_header设置为 100。

#include <pcap.h>

int main(int argc, char **argv) {

  FILE *pcapInputFile_p;
  pcap_file_header fileHeader;

  pcapInputFile_p = fopen(argv[1], "r");
  fread( &fileHeader,sizeof(pcap_file_header), 1, pcapInputFile_p );
  printf("%d\n",fileHeader.snaplen);  
  fclose(pcapInputFile_p);

}

我实际上不知道如何以及使用什么工具捕获此特定文件,但我正在尝试找出答案:)。

尝试在 Windows 机器上使用 Wireshark 1.11.0 重复此操作,我将“限制数据包大小”设置为 96。Wireshark 报告每个数据包都以 96 为单位进行切割,但在统计->摘要是 100,比我配置的多 4 个字节。好的,现在我将其设置为 106。我在每个数据包和整个数据包中都得到了 106概括对话!

所以现在我很好奇……现在是星期五下午,我想打发时间。我编写了一个脚本来捕获(使用 dumpcap 1.8.2)一个大小大于 1500 的数据包,并将其输出到文件中。在脚本运行期间,我下载了一个大文件,以获取一些大数据包。系统是Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1 x86_64 GNU/Linux。这是配置与实际快照长度在 50 到 150 之间的图(模式重复至少达到 1500)。阴影线仅显示配置 96 会在此系统上为我们带来 96。最大的差异是 2 个字节,总是比我配置的少!

的图片配置与实际捕获长度(需要代表才能发布,不确定存储多长时间)

总结一下,为什么会有X报告的捕获长度和实际捕获长度之间的字节差异是多少?为什么有时如此?为什么不同的系统/工具会有所不同?如果是这样,为什么?这是一个错误,还是我搞糊涂了?

谢谢你!

答案1

在这里回答我自己的问题,因为我提出这个问题后发现它为我“解决”了。如果没有@GuyHarris的帮助,我至少需要更长的时间才能理解这一点,他在上面留下了一条评论,所以谢谢你!

我花了一些时间编译了几个不同版本的 libpcap 以及最新的 tcpdump。结果可以分为三类(差、中等和完美),其中最新的 libpcap 测试正常。今天,当我在 Windows 上使用 dumpcap 和 Wireshark 重复测试时,我无法重复这个!我发誓,我没有疯!

概括- 这完全取决于 libpcap 版本。我没有发现系统或任何其他软件会影响这一点。所以大家,升级你的 libpcap 可以让你免于一些挫败感!:)

参见此处的图片 -配置与实际快照长度

相关内容