【问题标题】:Reading .pcap file while it is still being written to在仍在写入时读取 .pcap 文件
【发布时间】:2020-07-31 16:34:45
【问题描述】:

我正在编写一个 Windows C++ 应用程序,它正在读取 .pcap 文件并根据 USBPcap 结构表示数据包头(和数据)。

一个 .pcap 文件由USBPcapWireshark 创建,包含我的鼠标移动数据。

当我有正常的 .pcap 文件时一切正常,但我想知道是否有办法打开那个 .pcap 文件并从中读取数据,同时它仍然被写入(虽然它仍在跟踪我的鼠标移动)。我尝试使用pcap_open_offline() 打开它,但这给了我一个 NULL 指针。

有没有办法做到这一点?感谢您的任何意见。

【问题讨论】:

    标签: c++ windows pcap


    【解决方案1】:

    有没有办法做到这一点?

    第 1 步是确保 USBPcap 以“deny none”打开文件,以便其他程序可以打开并从中读取。如果它不这样做,请请求添加一个选项以允许它这样做。

    然后请记住,libpcap(WinPcap 和 Npcap 所基于的)期望从正在写入的文件中读取,因此它会报告一个结束-文件或到达文件的当前结尾时出错,没有任何继续从文件读取的规定,因此使用 libpcap/WinPcap/Npcap 将不起作用。

    这意味着您必须编写自己的代码才能从文件中读取。见this draft spec for the pcap file format

    (理想情况下,USBPcap 将提供一个,而不仅仅是一个程序,以从捕获设备中读取;这将允许 libpcap 直接捕获 Windows 上的 USB 流量,在这种情况下,您可以使用它。)

    【讨论】:

    • 是的,它看起来确实像 USBPcap 在创建文件时正在锁定文件。我尝试用std::ifstream ifs(fullFilename.c_str(), std::fstream::binary | std::fstream::in, _SH_DENYNO); 打开它,但失败了。有什么解决方法吗,还是只剩下更改 USBPcap 源代码?
    • 如果一个进程打开一个没有FILE_SHARE_READ 的文件,其他尝试打开该文件进行读取的进程将失败,无论他们尝试什么。因此,您必须更改 USBPcap 以使用 FILE_SHARE_READ 打开它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    相关资源
    最近更新 更多