我正在使用pcap在我的路由器上捕获ip(v4和v6)数据包。它工作得很好,但我注意到,有时以太网帧ethertype
或{linux {1}}或{linux {1}}的{{1}}不能正确指示ip的版本它们包含的数据包。
我期待如果我得到LINKTYPE_ETHERNET
为LINKTYPE_LINUX_SLL
(ethertype
)的帧,那么它应该包含一个带有0x0800
的ipv4数据包,如果我得到一个帧其ETHERTYPE_IP
为version == 4
(ethertype
),则应包含0x86DD
的ipv6数据包。
大多数情况下,上述情况属实,但有时情况并非如此。我会得到一个ETHERTYPE_IPV6
为version == 6
的帧,但不知何故它包含一个ipv6数据包,或者我得到一个ethertype
为ETHERTYPE_IP
的帧,但它包含一个ipv4数据包。
我似乎听说过“ipv4 over ipv6”或“ipv6 over ipv4”但我不确切知道它们是如何工作的,或者它们是否适用于我的问题,但我不确定是什么导致了这种不一致。 / p>
修改
我认为我的实际问题是这种行为是否正常。如果是这样,我应该忽略ethertype
字段,只需检查ip标头中的ETHERTYPE_IPV6
字段,以确定它是ipv4还是ipv6。