Сбой при чтении большого файла PCap

#c #pcap

#c #pcap

Вопрос:

Я запускаю следующий код на C для чтения пакетов внутри файла PCap:

 #include <iostream>
#include <pcap.h>

using namespace std;

int main()
{
    int num, inum,i  = 0;
    pcap_if_t *alldevs;
    pcap_t *adhandle;
    struct bpf_program fcode;
    bpf_u_int32 net, mask;
    char *dev;
    string file = "C:\Users\AwesomeUser\Desktop\dataset.pcap";
    char errbuff[PCAP_ERRBUF_SIZE];
    pcap_t * pcap = pcap_open_offline(file.c_str(), errbuff);
    struct pcap_pkthdr *header;
    const u_char *data = NULL;
    dev = pcap_lookupdev(errbuff);


    if (pcap_lookupnet( dev, amp;net, amp;mask, errbuff ) == -1)
    {
        fprintf(stderr, "Can't get netmask for device %sn", dev);
        net = 0;
        mask = 0;
    }


    u_int packetCount = 0;

    cout << "Pre-loop test";
    while( int returnValue = pcap_next_ex( pcap , amp;header, amp;data) >= 0)
    {
        cout << "inner loop test";
        if (pcap_compile(pcap , amp;fcode, "ip and tcp", 1, net) < 0)
        {
            fprintf( stderr, "nC   is unable to compile the packet filter. Please check the syntaxn");
            pcap_freealldevs(alldevs);
            return -1;
        }

        if ( pcap_setfilter( pcap, amp;fcode) < 0)
        {
            fprintf(stderr, "nThere is an error in setting the filter.n");
            pcap_freealldevs(alldevs);
            return -1;
        }

        printf("Packet number %in",   packetCount);
        printf("Packet size: %d bytesn", header->len);
        if ( header->len != header->caplen)
            printf("Warning! Packet size different from capture size: %ld bytesn", header->len);

        printf("Epoch time: %d:%d secondsnnn", header->ts.tv_sec, header->ts.tv_usec);

    }
    cout << packetCount;
    cin >> num;

    return 0;
}
  

Программа завершает работу со следующим выводом:

 Pre-loop test
  

Я определил, что сбой происходит при выполнении условия цикла while в самый первый раз:

 pcap_next_ex( pcap , amp;header, amp;data)
  

Насколько я знаю, pcap_next_ex должен прочитать следующий пакет. Я протестировал этот точный код с другими файлами .pcap, и он безупречно работает со всем, что я пробовал из Интернета, и с файлами, которые я создаю сам, используя Wireshark. Единственное различие, о котором я знаю, заключается в том, что файл dataset.pcap, который я пытаюсь прочитать в этом коде, очень большой (8 ГБ). Есть ли что-то особенное, что мне нужно сделать, чтобы прочитать такой большой файл? Что еще может быть причиной сбоя?

Комментарии:

1. вы уверены в приоритете оператора в int returnValue = pcap_next_ex( pcap , amp;header, amp;data) >= 0 результате значимого условия? (Я не)

2. @tobi303 Я попробовал while( pcap_next_ex( pcap , amp;header, amp;data) >= 0) , что дало тот же эффект во всех случаях