C++ 从USBPcap库读取原始数据

C++ 从USBPcap库读取原始数据,c++,c,windows,visual-c++,C++,C,Windows,Visual C++,我正在使用它捕获USB设备驱动器和操作系统之间传输的数据,但它会将数据保存在.pcap文件中,该文件只能由Wireshark自己读取。我研究了USBPcap源代码,但由于我对Windows API一无所知,我无法理解源代码,只是在调试时发现了此文件: 我需要原始数据,而不是.pcap编码文件。如何获得它?文件格式很简单,最简单的解决方案是自己解析或使用现有库: USBPcap使用上述格式: 文件头是: typedef struct pcap_hdr_s { UINT32 magic_n

我正在使用它捕获USB设备驱动器和操作系统之间传输的数据,但它会将数据保存在
.pcap
文件中,该文件只能由Wireshark自己读取。我研究了USBPcap源代码,但由于我对Windows API一无所知,我无法理解源代码,只是在调试时发现了此文件:


我需要原始数据,而不是
.pcap
编码文件。如何获得它?

文件格式很简单,最简单的解决方案是自己解析或使用现有库:

USBPcap使用上述格式:

文件头是:

typedef struct pcap_hdr_s {
    UINT32 magic_number;   /* magic number */
    UINT16 version_major;  /* major version number */
    UINT16 version_minor;  /* minor version number */
    INT32  thiszone;       /* GMT to local correction */
    UINT32 sigfigs;        /* accuracy of timestamps */
    UINT32 snaplen;        /* max length of captured packets, in octets */
    UINT32 network;        /* data link type */
} pcap_hdr_t;
每个数据包的格式如下:

typedef struct pcaprec_hdr_s {
    UINT32 ts_sec;         /* timestamp seconds */
    UINT32 ts_usec;        /* timestamp microseconds */
    UINT32 incl_len;       /* number of octets of packet saved in file */
    UINT32 orig_len;       /* actual length of packet */
} pcaprec_hdr_t;

感谢您的回复,我查看了将在文件中写入数据的源,但我找不到这些头的任何足迹。是写入发生的位置。您链接了写入输出文件(或管道)的位置。USBPcapCMD本质上是驱动程序的用户空间助手接口。实际捕获的pcap数据包在USBPcapDriver中生成。USBPcapCMD只需转发从USBPcapDriver读取的数据并将其写入输出。它甚至不检查数据包边界——它只是复制字节。