我正在使用pcap捕获路由器上的ip(v4和v6)数据包。 它工作得很好,但我注意到,有时ethertype
的以太网帧(的LINKTYPE_ETHERNET
)或Linux的熟捕捉封装( LINKTYPE_LINUX_SLL
)不正确指示它们所包含的IP数据包的版本。
我期待,如果我得到它的一帧ethertype
是0x0800
( ETHERTYPE_IP
),那么它应该包含一个IPv4包version == 4
,如果我得到它的一帧ethertype
是0x86DD
( ETHERTYPE_IPV6
),那么它应该包含一个IPv6数据包version == 6
。
在大多数情况下,上述情况是正确的,但有时并非如此。 我会得到它的一帧ethertype
是ETHERTYPE_IP
但不知何故,它包含一个IPv6数据包或者我得到它的一帧ethertype
是ETHERTYPE_IPV6
但它包含的IPv4数据包。
我似乎听说过“ ipv4超过ipv4”或“ ipv6超过ipv4”,但我不知道它们是如何工作的或者它们是否适用于我的问题,但是否则我不确定是什么导致了这种不一致。
编辑
我认为我的实际问题是这种行为是否正常。 如果是这样,我应该简单地忽略ethertype
字段,而只是检查ip标头中的version
字段以确定它是ipv4还是ipv6。