Как извлечь поля опций в заголовке TCP с помощью C/C++ в случае автономного файла pcap. Я попытался включить поле опции в структуру заголовка, но это не дает последовательного результата, когда я сравниваю результат с Wireshark. Кажется, что произвольные байты пропадают при доступе через структуру заголовка TCP. Пожалуйста помоги.
Вместо того, чтобы пытаться напрямую прочитать файл, используйте pcap_open_offline
или pcap_fopen_offline
из libpcap
. Это прочитает файл сохранения и позволит вам отправлять фильтры. Псевдокод идет следующим образом (вам нужно будет добавить обработку ошибок):
char *fname = "/path/to/my/file";
const u_char *packet;
pcap_t *handle;
handle = pcap_open_offline (fname, errbuf);
while (packet = pcap_next(handle,&header))
{
char *data = (char *) packet;
...
}
pcap_close (handle);
Если вы случайно используете libpcap
, вам придется опубликовать код. Помните, что для надежного поиска IP-заголовков вам нужно будет проверить тип ethernet (ETHER_TYPE_IP
vs ETHER_TYPE_8021Q
), затем найти заголовок TCP (длина заголовка IP может меняться), и только тогда вы получите указатель на заголовок TCP,