2

我正在尝试在 FreeBSD 9.2 上使用带有 libpcap 版本 1.4.0 的 TShark 1.10.6 创建的 pcap 文件,并在 Windows 7 上使用 Visual Studio、SharpPcap 4.2、PacketDotNet 0.13 和 WinPcap 4.1.3 中的 c# 执行此操作.

引发的异常是Unable to open offline adapter: bad dump file format,它发生在例程 CaptureFileReaderDevice 中:

IntPtr adapterHandle = LibPcapSafeNativeMethods.pcap_open_offline( captureFilename, errbuf);

有趣的是,Wireshark 版本 1.10.3 在同一系统上——并且也使用同一版本的 WinPcap,能够打开文件!

什么会导致 SharpPcap 无法打开此文件?

编辑#1:

我更仔细地查看了 WireShark 的版本信息,显然它使用的是支持 AirPcap 的 WinPcap 版本。我相信 SharpPcap 包括 AirPcap,所以我想知道这是否会有所作为。

在 64 位 Windows 7 Service Pack 1 上运行,build 7601,WinPcap 版本 4.1.3(packet.dll 版本 4.1.0.2980),基于 libpcap 版本 1.0 分支 1_0_rel0b (20091008),GnuTLS 2.12.18,Gcrypt 1.4.6 , 没有 AirPcap。

另外,我正在为 32 位输出进行编译。

编辑#2:

使用 pcap 的 WireShark统计信息/摘要,它显示以下有关捕获的信息:

  • 操作系统:FreeBSD 9.2-RELEASE-p10
  • 捕获应用程序:Dumpcap 1.10.6(Git Rev Unknown from unknown)
4

3 回答 3

3

简短的回答是原始服务器正在生成pcap-ng捕获文件,WinPcap 当前不支持该格式,因此 SharpPcap 无法打开这些文件。但是,当前版本的 Wireshark 确实支持 pcap-ng 捕获文件。

导致我得到这个答案的血淋淋的细节:

我在 Wireshark 文档中找到了Libpcap 文件格式,根据 Global Header 部分,我有一个包含幻数0x4d3c2b1a 的转储文件(如我的 Windows 7 系统上所示)。

医生说:

对于纳秒分辨率的文件,写入应用程序写入 0xa1b23c4d,两个低位字节的两个半字节交换,读取应用程序将读取 0xa1b23c4d(相同)或 0x4d3cb2a1(交换)。

这些都不匹配这个幻数,所以我在file原始 FreeBSD 系统上运行 pcap 文件的命令,它报告:

em0.pcap:pcap-ng 捕获文件 - 1.0 版

因此,我查看了该服务器上的/usr/share/misc/magic并找到了 pcap-ng 条目:

#
# "pcap-ng" capture files.
# http://www.winpcap.org/ntar/draft/PCAP-DumpFileFormat.html
# Pcap-ng files can contain multiple sections. Printing the endianness,
# snaplen, or other information from the first SHB may be misleading.
#
0       ubelong         0x0a0d0d0a
>8      ubelong         0x1a2b3c4d      pcap-ng capture file
>>12    beshort         x               - version %d
>>14    beshort         x               \b.%d
0       ulelong         0x0a0d0d0a
>8      ulelong         0x1a2b3c4d      pcap-ng capture file
>>12    leshort         x               - version %d
>>14    leshort         x               \b.%d

这向我指出了PCAP 转储文件格式(请参阅部分标题块描述)。

pcap文件的hexdump显示:

0000000 0d0a 0a0d 0070 0000 3c4d 1a2b 0001 0000
0000010 ffff ffff ffff ffff 0003 0017 7246 6565
0000020 5342 2044 2e39 2d32 4552 454c 5341 2d45

这证实了:

  1. 这确实是下一代pcap 文件——因为块头以 Block Type = 0x0A0D0D0A(显示为 0d0a 0a0d)开头,并且
  2. 标头包含pcap-ng幻数 0x1a2b3c4d(显示为 3c4d 1a2b)。
于 2014-10-22T20:43:07.457 回答
0

将此包中的WinPcap DLL 复制到您的应用程序文件夹。它应该解决问题。

于 2015-05-16T02:27:21.587 回答
0

作为短期措施,我下载了最新版本的 Wireshark (v2.0) 并打开,然后将文件另存为 Redhat 6.1 *.tcpdump,SharpPcap 可以正常读取。

于 2015-12-24T18:45:10.757 回答