【问题标题】:Use Winpcap to read saved file(.PCAP) in uint16 structure使用 Winpcap 读取 uint16 结构中保存的文件(.PCAP)
【发布时间】:2020-02-17 14:41:14
【问题描述】:

我使用 Winpcap 读取保存的 .pcap 文件,代码如下,但输出以十六进制格式输入 unsigned char "u_char data"。如何以十进制格式读取 uint16 结构的 .pcap 文件?

string file = Address_Data;
char errbuff[PCAP_ERRBUF_SIZE];
pcap_t * pcap = pcap_open_offline(file.c_str(), errbuff);
struct pcap_pkthdr *header;
typedef unsigned char   u_char;
const u_char *data;
u_int packetCount = 0;

while (int returnValue = pcap_next_ex(pcap, &header, &data) >= 0)
{
    printf("Packet # %i\n", ++packetCount);
    printf("Packet size: %d bytes\n", header->len);
    if (header->len != header->caplen)
        printf("Warning! Capture size different than packet size: %ld bytes\n", header->len);
    printf("Epoch Time: %d:%d seconds\n", header->ts.tv_sec, header->ts.tv_usec);
    for (u_int i=0; (i < header->caplen ) ; i++)
    {
        if ( (i % 16) == 0) printf("\n");
        printf("%.2x ", data[i]);
    }
   printf("\n\n");
}

例如 data[0]=24 , data[1]=8a 我希望数据格式为 uint16 和十进制而不是十六进制,例如:data[0]= 9354 [248A hex]

【问题讨论】:

  • 这里的9354确实是十进制数。如果您不认识该值并且认为应该认识该值,则可能是因为数据采用大端格式 - 也就是网络字节顺序。
  • @500-InternalServerError 谢谢你的回答 但内在的问题是:如何在 winpcap 中将数据格式从 1byte hex 转换为 2byte unsigned int (uint16)?

标签: c++ visual-c++ visual-studio-2013 pcap winpcap


【解决方案1】:

我通过简单地将两个 8 位转换为一个 16 位解决了我的问题,如下所示,因为我在 winpcap 中没有看到任何读取格式。

uint16_T(data[2 * i]) * 256 + uint16_T(data[(2 * i) + 1]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-15
    • 2016-02-08
    • 2013-05-27
    • 2017-08-15
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    相关资源
    最近更新 更多