【问题标题】:How can I open a pcap-ng file in C#如何在 C# 中打开 pcap-ng 文件
【发布时间】:2012-02-16 21:40:27
【问题描述】:

到目前为止,我一直在使用 WinPcap 在 C# 中打开 pcap 文件:

[DllImport("wpcap.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
private extern static IntPtr pcap_open_offline(string fname, byte[] errbuf);

现在我想做一些类似于打开 pcap-ng 文件的操作,以便获得纳秒级分辨率(我有一个新的嗅探器 :-))

不幸的是,WinPcap 失败并出现以下错误:“转储文件格式错误”

有人知道如何在 Windows 中使用 pcap-ng 吗?

干杯, 佩德罗

【问题讨论】:

  • 你能展示更多为我工作的作品吗?我需要阅读 .pcap 文件并阅读所有信息。

标签: c# pcap libpcap winpcap


【解决方案1】:

我已经移植了WinPcap to libpcap 1.7.3,现在它可以打开 pcap-ng 文件并支持纳秒时间戳分辨率。

【讨论】:

    【解决方案2】:

    Libpcap 1.1.x 及更高版本支持读取一些 pcap-ng 文件(所有接口具有相同的链路层标头类型和快照长度的文件);但是,没有基于 libpcap 1.1.x 或 1.2.x 的 WinPcap 版本,因此没有可以读取 pcap-ng 文件的 WinPcap 版本。因此,在 WinPcap 发布之前,没有任何 CLR 语言包装器能够读取 pcap-ng 文件。

    此外,libpcap/WinPcap API 当前不返回具有纳秒分辨率的时间戳,因此即使您确实使用 libpcap 读取了具有纳秒分辨率时间戳的文件,您也不会看到纳秒分辨率时间戳。

    现在,您必须编写自己的代码,或者编写一个围绕 Wireshark 的 Wiretap 库的包装器。 (请注意,Wiretap 的 API 在从一个 Wireshark 主要版本到另一个版本时会发生重大且不兼容的更改。)

    【讨论】:

    • 谢谢,这就是我得出的结论。你知道他们是否经常更改 Wiretap 的 API 吗?我想此时是相当稳定的。我打算使用 wtap_open_offline 然后我会自己解析。 (在 WinPcap 中也是出色的工作,多年来我一直是一个快乐的用户)。
    • 如果我有时间,我可能会在 Wireshark 1.8.0 中大幅更改 Wiretap 的 API,以更好地支持 pcap-NG(以及其他一些捕获文件格式)。我还想找时间向 libpcap 添加新的 API 以更好地处理 pcap-NG;如果是这样,希望 WinPcap 将更新到 libpcap 的未来版本。
    【解决方案3】:

    您是否尝试过使用 sharpPcap?不确定它是否支持它(现在不能尝试),但它确实支持打开捕获文件以及 iirc: http://sourceforge.net/apps/mediawiki/sharppcap/index.php?title=Main_Page

    【讨论】:

    • 感谢您的提示,但它不支持它。 CaptureFileReaderDevice 抛出这个:“无法打开离线适配器:转储文件格式错误”
    • 这不是 SharpPcap 的产品,但问题是您使用的 libpcap/winpcap 版本还不支持 pcap-ng 格式文件。如果 api 保持不变但支持被添加到 libpcap/winpcap 那么 SharpPcap 将透明地获得使用这些 pcap-ng 文件的能力,因为它实际上并没有做任何解析本身,只是与较低级别的库( libpcap/winpcap)。
    猜你喜欢
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 2022-01-04
    • 2013-08-02
    • 2012-11-10
    • 1970-01-01
    • 2014-02-04
    相关资源
    最近更新 更多