gpt4 book ai didi

c - 从 PPP 接口(interface)捕获数据包的问题

转载 作者:行者123 更新时间:2023-11-30 14:29:43 25 4
gpt4 key购买 nike

我使用libpcap从PPP接口(interface)捕获数据,并添加过滤器如下:

char filter_exp[] = "ip";   

但是当我在回调函数中嗅探数据包时,我发现ip数据包的格式是

不正确, header 大小不是 20 字节。

当我从 eth0 抓包时,一切正常。

谁能告诉我如何通过libpcap从PPP接口(interface)获取正确的ip数据包,谢谢!

最佳答案

But when i sniff the packets in callback function, I found that the format of ip packet is not correct, the header size is not 20 byte.

您的回调函数正在使用 pcap_t 上的 pcap_datalink() 调用的结果来确定如何解析数据包,或者您已指定不同的回调函数,具体取决于pcap_datalink() 的结果,对吗?

如果不是,您可能会假设数据包将具有特定的链路层 header 类型,但这始终是错误的做法。

PPP 数据包不一定具有与以太网数据包相同的链路层 header 类型(尽管在使用 WinPcap 的 Windows 上,它们可能具有相同的链路层 header 类型!)。它们也可能没有 PPP header ;特别是,在 Linux 上,他们将有一个 Linux cooked capture header因为,至少在某一时刻,内核会剥离 PPP header 并提供链路层 header ,因此 libpcap 必须进行“熟”捕获才能能够获取网络层协议(protocol)类型。对于 Linux 上的 PPP 设备,pcap_datalink() 将返回 DLT_LINUX_SLL,而不是 DLT_PPP,以表明这一点。

关于c - 从 PPP 接口(interface)捕获数据包的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4253374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com