如何使用libpcap解析以太网数据包?

| 我在C ++中使用libpcap从pcap文件中读取数据包,例如:
rc = pcap_next_ex((pcap_t*)handle, &header, (const unsigned char**)packet);
我想解析数据包头(没有有效负载)。 例如,如何解析给定的数据包以提取其源IP和目标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报头的末尾附加。在这里看到一个例子     

要回复问题请先登录注册