Используйте Winpcap для чтения сохраненного файла (.PCAP) в структуре uint16 - PullRequest
0 голосов
/ 21 октября 2019

Я использовал Winpcap для чтения сохраненного файла .pcap с приведенным ниже кодом, но вывод был помещен в беззнаковый символ "u_char data" в шестнадцатеричном формате. Как я могу прочитать .pcap файл в структуре uint16 в десятичном формате?

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]

1 Ответ

0 голосов
/ 02 ноября 2019

Я решил свою проблему с помощью простого преобразования двух 8-битных в один 16-битный, как показано ниже, потому что я не видел никакого формата чтения в winpcap.

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