0

ワンショットで PCAP ファイルのリストを開き、PCAP ファイルのリストを 1 つの出力ファイルに出力した経験のある人はいますか? たとえば、1.pcap、2.pcap、および 3.pcap があり、1.pcap、2.pcap、および 3.pcap で何らかの処理を行い、結果を 1 つの出力 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 ファイルの読み取りに使用できます。質問: 単一の pcap_open_offline() メソッドでファイル (1.pcap、2.pcap、3.pcap) のリストを開くことができるようにこのコードを変更したい場合、何を変更する必要がありますか? アドバイスしたい専門家はいますか?ありがとう

4

1 に答える 1

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;
}        
于 2013-08-07T06:58:58.733 に答える