Я написал следующий код для захвата пакетов; но это на самом деле сохранить последний пакет.
process_Packet(const struct pcap_pkthdr *header,
const u_char * packet)
{
FILE* pFile = NULL;
pFile = fopen ("myfile.pcap" , "wb"); // open for writing in binary mode
pcap_dumper_t * dumpfile = pcap_dump_fopen(pcap_handle,pFile);
if (dumpfile == NULL)
{
printf("***NOOOO Dump!!!!!!!***");
}
else
{
pcap_dump((unsigned char *) dumpfile, header, packet);
printf("***Dumped!!!!!!!***");
}
pcap_dump_close(dumpfile);
}
Я хочу написать код, который собирает пакеты и добавляет новый пакет к предыдущим.
Я должен сказать, что fopen("...", "ab")
повреждает файл и не работает.
pcap_dump_fopen записывает некоторые заголовки инициализации, поэтому его следует вызывать только один раз для пустого файла. После того, как файл с заголовками создан вами на самом деле Можно передать экземпляр FILE *, открытый в режиме добавления, в pcap_dump, непосредственно приведенный к unsigned char *. Но это небезопасный подход — лучше, по крайней мере, написать все обязательные поля самостоятельно (это все равно 10 строк), поскольку реализация функции может измениться в будущем, а формат файла не изменится. И я не очень понимаю, почему вы хотели бы открыть файл для каждого сброшенного пакета. Если вы хотите убедиться, что все данные записаны, вы можете просто вызвать fflush.