Чтение списка файлов PCAP

Кто-нибудь здесь имеет опыт открытия списка файлов PCAP за один раз и вывода списка файлов PCAP в один выходной файл? Например, у меня есть 1.pcap, 2.pcap и 3.pcap, и я хотел бы выполнить некоторую обработку 1.pcap, 2.pcap и 3.pcap, а затем объединить результат только в один выходной файл pcap (output.pcap ). Ниже приведен мой код на данный момент:

static pcap_t *input = NULL;
input = pcap_open_offline(packet_path, errbuf);
if (input == NULL){exit(0);}
pktMatch = pcap_dump_open(input, "-");
/*Do some processing, eg to find an IP*/
compareIP=true;
if (compareIP){
    pcap_dump(pktMatch, &pktHeader, pktData);
    continue;
}

Приведенный выше код может работать для чтения одного входного файла pcap. Вопрос: Если я хочу изменить этот код, чтобы он мог открывать список файлов (1.pcap, 2.pcap, 3.pcap) в одном методе pcap_open_offline(), что мне нужно изменить? Кто-нибудь из специалистов посоветует? Спасибо


person CheeHow    schedule 07.08.2013    source источник


Ответы (1)


Вот некоторый псевдокод; превратить его в настоящий код — ваша работа:

for (all files) {
    new pcap = pcap_open_offline(the file, errbuf);
    if (new pcap == NULL) {
        fprintf(stderr, "Opening \"%s\" failed: %s\n", the file, errbuf);
        exit(1);
    }
    add new pcap to the list of pcaps to read;
}
mark all files as not having a packet yet;
for (;;) {
    for (all open files) {
        if (the file doesn't have a packet yet)
            read a packet from the file and make it that file's current packet;
    }
    packet time = nothing;
    for (all files) {
        /* note: "nothing" is older than all possible times */
        if (that file's packet's time is newer than packet time) {
            make that file's packet the one to process next;
            packet time = that packet's time;
        }
    }
    /*Do some processing on the packet we selected, eg to find an IP*/
    if (compareIP)
        pcap_dump(pktMatch, &pktHeader, pktData);
    mark the file whose packet we selected as not having a packet yet;
}        
person Community    schedule 07.08.2013
comment
спасибо, мистер Гай! попробую сделать! В любом случае спасибо за ваше предложение! - person CheeHow; 07.08.2013
comment
Мистер Гай, как бы вы поступили add new pcap to the list of pcaps to read? это связанный список? Например, у меня есть файл 1.pcap, как я могу добавить его к 1.pcap? - person CheeHow; 07.08.2013
comment
Как я могу поместить pcap_t *input в виде массива? pcap_t[] *input вести список pcaps? - person CheeHow; 07.08.2013
comment
Вы можете поместить их в список, вы можете поместить их в массив (который вам придется динамически выделять и перераспределять самостоятельно, если вы программируете на C) и т. д.; как я уже сказал, превратить его в настоящий код — ваша работа. - person ; 08.08.2013