Я пытаюсь прочитать файл pcap для некоторой структуры данных, такой как вектор или массив, а затем использовать собранные данные (только выбранные как длина пакета, временная метка) в приложении. Я нашел пример приложения для чтения PCAP:Чтение файла pcap в вектор/массив
#include <stdio.h>
#include <pcap.h>
#define LINE_LEN 16
void dispatcher_handler(u_char *, const struct pcap_pkthdr *, const u_char *);
int main(int argc, char **argv)
{
pcap_t *fp;
char errbuf[PCAP_ERRBUF_SIZE];
if(argc != 2)
{
printf("usage: %s filename", argv[0]);
return -1;
}
/* Open the capture file */
if ((fp = pcap_open_offline(argv[1], // name of the device
errbuf // error buffer
)) == NULL)
{
fprintf(stderr,"\nUnable to open the file %s.\n", argv[1]);
return -1;
}
/* read and dispatch packets until EOF is reached */
pcap_loop(fp, 0, dispatcher_handler, NULL);
pcap_close(fp);
return 0;
}
void dispatcher_handler(u_char *temp1,
const struct pcap_pkthdr *header,
const u_char *pkt_data)
{
u_int i=0;
/*
* unused variable
*/
(VOID*)temp1;
/* print pkt timestamp and pkt len */
printf("%ld:%ld (%ld)\n", header->ts.tv_sec, header->ts.tv_usec, header->len);
printf("\n\n");
}
Проблема с pcap_loop()
. Я нашел documentation для этого, но единственной информацией является то, что это чтение всего файла, пока не будет достигнут конец файла. Я пытался обрабатывать файл как типичный FILE
, а во время цикла читать до EOF
, но он не работает, потому что я не могу просто обрабатывать fp
как FILE
.
Также я не вижу возможности передать указатель на pcap_handler
, чтобы получить его позже.
Может кто-нибудь предложить, как я могу это сделать другим способом?