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

use*_*766 4 c++ parsing packet libpcap

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

rc = pcap_next_ex((pcap_t*)handle, &header, (const unsigned char**)packet);
Run Code Online (Sandbox Code Playgroud)

我想解析数据包标头(没有有效负载).

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

谢谢

Ioa*_*pas 5

查看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);
Run Code Online (Sandbox Code Playgroud)

对于IP层

ip = (struct sniff_ip*)(packet + SIZE_ETHERNET);
Run Code Online (Sandbox Code Playgroud)

如果要解析其他协议,只需定义自己的结构即可.如果您希望(或不希望)解析有效负载,那么您可以(或不)定义指向有效负载起点的指针.


cpx*_*cpx 2

IP 标头的数据字段按大端顺序打包,数据包有效负载紧随 IP 标头的末尾附加。请参阅此处的示例