Я использую 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()
?