我有'struct sk_buff'类型的SKB,我试图确定该数据包是IPv4还是IPv6类型。基本上我需要源IP地址,但不知道,确定如何检查iph或ipv6h中的'version'字段,或者不知道它是否是检查'version'值的可靠方法。
我机器上sk_buff实现中的网络标题是:
union {
struct iphdr *iph;
struct ipv6hdr *ipv6h;
struct arphdr *arph;
unsigned char *raw;
} nh;
iphdr和ipv6hdr有通常的定义。
如何从sk_buff中的IP网络头确定IP版本?
答案 0 :(得分:3)
出于这个原因,IP版本号在数据包的前4位编码,无论是ipv4还是ipv6。使用ipv4指针(ipv)并检查version
字段。
答案 1 :(得分:1)
nf_ct_l3num(skb->nfct)
可以告诉您是否已经初始化此skb的conntrack后它是IPv4还是IPv6。