Как извлечь поля параметров в заголовке 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
против ETHER_TYPE_8021Q
), затем найдите заголовок TCP (длина заголовка IP может варьироваться), и только тогда вы получите указатель на заголовок TCP.
Других решений пока нет …