我在 C++ 中使用 libpcap 从 pcap 文件中读取数据包,例如:
rc = pcap_next_ex((pcap_t*)handle, &header, (const unsigned char**)packet);
我想解析数据包标头(没有有效负载)。
例如,如何解析给定的数据包以提取其源和目标 IP 地址?
谢谢
查看 libpcap http://www.tcpdump.org/pcap.html的代码示例
在got_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet);
函数中,您有一个指向*packet
数据包开头的指针。要解析以太网标头,您只需要使用相应的指针
ethernet = (struct sniff_ethernet*)(packet);
对于 IP 层
ip = (struct sniff_ip*)(packet + SIZE_ETHERNET);
如果你想解析其他协议,你只需要定义你自己的结构。如果您想要(或不想要)解析有效负载,那么您可以(或不)定义指向有效负载开头的指针。
IP 报头的数据字段以大端顺序打包,数据包有效负载紧跟在 IP 报头的末尾。在这里看一个例子