【问题标题】:Read raw data from USBPcap library从 USBPcap 库中读取原始数据
【发布时间】:2020-03-07 21:45:01
【问题描述】:

我正在使用USBPcap 来捕获 USB 设备驱动器和操作系统之间传输的数据,但它会将数据保存在 .pcap 文件中,Wireshark 可以自行读取该文件。我进入了 USBPcap 源代码,但是因为我对 Windows API 一无所知,所以我无法理解源代码,只是在调试时发现了这个文件:

https://github.com/desowin/usbpcap/blob/master/USBPcapCMD/thread.c#L177

我需要原始数据,而不是.pcap 编码文件。我怎么能得到它?

【问题讨论】:

    标签: c++ c windows visual-c++


    【解决方案1】:

    .pcap文件格式很简单,最简单的解决办法就是自己解析或者使用已有的库:https://wiki.wireshark.org/Development/LibpcapFileFormat

    USBPcap 使用上述格式:https://github.com/desowin/usbpcap/blob/37a8e3cf12234df96a7e101eec336085dbb3e4c7/USBPcapDriver/include/USBPcap.h#L63

    文件头是:

    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;
    

    【讨论】:

    • 感谢您的回复,我查看了将在文件中写入数据的源,但我找不到这些标头的任何足迹。 this 是它发生的地方。
    • 您链接了写入输出文件(或管道)的位置。 USBPcapCMD 本质上是驱动程序的用户空间助手接口。实际捕获的 pcap 数据包在 USBPcapDriver 中生成。 USBPcapCMD 只是转发从 USBPcapDriver 读取的数据并将其写入输出。它甚至不检查数据包边界——它只是复制字节。
    猜你喜欢
    • 2012-02-11
    • 2019-04-02
    • 1970-01-01
    • 2015-12-30
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    相关资源
    最近更新 更多