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

C++ 如何使用libpcap解析以太网数据包?,c++,parsing,packet,libpcap,C++,Parsing,Packet,Libpcap,我在C++中使用LIPPCAP来读取pCAP文件中的数据包,例如: rc = pcap_next_ex((pcap_t*)handle, &header, (const unsigned char**)packet); 我想解析数据包头(没有有效负载) 例如,如何解析给定的数据包以提取其源和目标ip地址 感谢IP报头的数据字段按大端顺序打包,数据包有效负载在IP报头的末尾。请参见示例签出libpcap的代码示例 在got_数据包中(u_char*args,const struct pc

我在C++中使用LIPPCAP来读取pCAP文件中的数据包,例如:

rc = pcap_next_ex((pcap_t*)handle, &header, (const unsigned char**)packet);
我想解析数据包头(没有有效负载)

例如,如何解析给定的数据包以提取其源和目标ip地址


感谢

IP报头的数据字段按大端顺序打包,数据包有效负载在IP报头的末尾。请参见示例

签出libpcap的代码示例

got_数据包中(u_char*args,const struct pcap_pkthdr*头,const u_char*数据包)函数您有一个指向数据包开头的指针。要解析以太网报头,只需使用相应的指针

ethernet = (struct sniff_ethernet*)(packet);
对于IP层

ip = (struct sniff_ip*)(packet + SIZE_ETHERNET);

如果要解析其他协议,只需定义自己的结构。如果您希望(或不希望)解析有效负载,则可以(或不希望)定义指向有效负载开始的指针。

Pcap具有使用数据包中的数据进行过滤的过滤器。因此我得出结论,它知道什么数据在哪里,它能提供这些数据吗?(例如,作为头文件)如果您想使用C++,为什么不使用一个包来封装LIPPCAP并提供内置的协议分析器?我可以推荐我正在使用的,请参阅以了解如何使用此库解析数据包。