pcap: как проверить границы пакетов в pcap_dispatch - PullRequest
0 голосов
/ 17 января 2020

Я использую libpcap для обработки файлов PCAP, поиска IP-заголовка, извлечения чего-либо, перехода в udp / tcp и извлечения чего-либо и т. Д.

pcap_dispatch() перенаправляет пакет на определенный обратный вызов как:

typedef void (*pcap_handler)(u_char *user, const struct pcap_pkthdr *h, const u_char *bytes);

Если я правильно читаю man-страницу, bytes выше - это указатель на caplen байтов данных из пакета, где caplen находится в struct pcap_pkthdr *.

Означает ли это, что подпрограмма pcap_handler должна будет поддерживать указатель конца буфера пакетов и всегда проверять перед перемещением указателя bytes вдоль?

В качестве альтернативы Я бы просто выделил буфер внутри pcap_handler:

u_char *pktbuf = malloc(h->caplen);

, и это гарантировало бы границы.

Что обычно является правильным способом обработки pcaps в pcap_dispatch() или pcap_loop()?

1 Ответ

1 голос
/ 03 апреля 2020

bytes гарантированно будет как минимум h->caplen большим. Кроме этого вам не нужно делать связанные проверки.

...