我正在使用libpcap
处理PCAP文件,查找IP标头,提取内容,移至udp / tcp并提取内容等等。
[pcap_dispatch()
将数据包插入到定义为以下内容的回调中:
typedef void (*pcap_handler)(u_char *user, const struct pcap_pkthdr *h, const u_char *bytes);
如果我正确阅读了手册页,则上面的bytes
是数据包中caplen
字节数据的[[指针,其中caplen
在struct pcap_pkthdr *
中。
pcap_handler
例程将需要维护数据包缓冲区指针的末尾,并始终在移动bytes
指针之前进行检查?或者,我只在pcap_handler
中分配缓冲区:
u_char *pktbuf = malloc(h->caplen);
它将保证边界。[
pcap_dispatch()
或pcap_loop()
中通常处理pcap的正确方法是什么?
bytes
保证至少为h->caplen
大。除此之外,您不需要进行绑定检查。