pcap ethertype与ip版本不一致

问题描述 投票:0回答:0

我正在使用pcap捕获路由器上的ip(v4和v6)数据包。 它工作得很好,但我注意到,有时ethertype的以太网帧(的LINKTYPE_ETHERNET )或Linux的熟捕捉封装( LINKTYPE_LINUX_SLL )不正确指示它们所包含的IP数据包的版本。

我期待,如果我得到它的一帧ethertype0x0800ETHERTYPE_IP ),那么它应该包含一个IPv4包version == 4 ,如果我得到它的一帧ethertype0x86DDETHERTYPE_IPV6 ),那么它应该包含一个IPv6数据包version == 6

在大多数情况下,上述情况是正确的,但有时并非如此。 我会得到它的一帧ethertypeETHERTYPE_IP但不知何故,它包含一个IPv6数据包或者我得到它的一帧ethertypeETHERTYPE_IPV6但它包含的IPv4数据包。

我似乎听说过“ ipv4超过ipv4”或“ ipv6超过ipv4”,但我不知道它们是如何工作的或者它们是否适用于我的问题,但是否则我不确定是什么导致了这种不一致。

编辑
我认为我的实际问题是这种行为是否正常。 如果是这样,我应该简单地忽略ethertype字段,而只是检查ip标头中的version字段以确定它是ipv4还是ipv6。

c++ linux pcap libpcap
© www.soinside.com 2019 - 2024. All rights reserved.