У меня есть файл pcap, захваченный wirehark, теперь мне нужно прочитать каждый его пакет и записать их в вектор структуры. Я получил проспект с записью пакетов в структуру. структура:Написание pcap-пакетов в структуру с libpcap
struct pktStruct {
struct pcap_pkthdr * pkt_header; // header object
const u_char * pkt_data; // data object
long time; // used to compare with each other
};
код, как я сохранить каждый пакет структуры:
string resultFile = "/home/xing/Desktop/tmp.pcap";
char errbuff[PCAP_ERRBUF_SIZE];
pcap_t * resultPcap = pcap_open_offline(resultFile.c_str(), errbuff);
struct pcap_pkthdr * header; // header object
const u_char * data; // data object
vector<pktStruct> pktVector; // this vector contains each pktStruct
pktStruct myStruct;
while (int i=pcap_next_ex(resultPcap,&header,&data) >=0) {
myStruct.pkt_header = header;
myStruct.pkt_data = data;
myStruct.time = header->ts.tv_sec * 1000000 + header->ts.tv_usec;
pktVector.push_back(myStruct);
}
, когда я напечатал информацию каждого пакета, я обнаружил каждую структуру, сохраненную пакет полностью одинаковы. я сохранил тот же пакет для каждой структуры вектора?
Привет, спасибо за наблюдение, теперь я могу сохранить данные каждого пакета в каждой структуре. но все же каждая структура имеет одинаковую информацию заголовка. Я использовал код ниже, пытаясь сделать копию заголовка, но это не сработало правильно: 'header_copy = (pcap_pkthdr *) malloc (sizeof (header)); memcpy ((void *) header_copy, (const void *) header, sizeof (header)); myStruct.pkt_header = header_copy; 'можете ли вы дать мне некоторое руководство о том, как правильно сохранить заголовки для каждой структуры? – wangx1ng
Я следил за вашим предложением и не определял свой pkt_header как указатель, и он сохранил правильный заголовок для каждой структуры, но мне нужно отсортировать вектор и использовать 'pcap_dump()', которому нужен аргумент 'pcap_pkthdr * 'для записи мой вектор в новый файл pcap. теперь я не могу использовать функцию 'pcap_dump' для записи моего вектора в новый файл pcap, так как теперь у меня нет объекта' pcap_pkthdr * ', что мне нужно сделать, чтобы написать мой вектор в pcap сейчас? – wangx1ng
«struct pcap_pkthdr *» - это указатель на 'struct pcap_pkthdr'. Как и в C, в C++ оператор '&' возвращает указатель на свой операнд. (Но вы уже знали это, о чем свидетельствует использование вами оператора '&' в вызове 'pcap_next_ex()'.) –