确定数据包是来自 sk_buff 的网络 header 的 ipv4 还是 ipv6
Determining if a packet is ipv4 or ipv6 from sk_buff's network header
我有 'struct sk_buff' 类型的 SKB,我试图确定数据包是 IPv4 还是 IPv6 类型。基本上我需要源 IP 地址,但不知道如何检查 iph 或 ipv6h 中的 'version' 字段,或者不知道它是否是检查 'version' 值的可靠方法。
网络 header 在我机器上的 sk_buff 实现中是:
union {
struct iphdr *iph;
struct ipv6hdr *ipv6h;
struct arphdr *arph;
unsigned char *raw;
} nh;
并且iphdr和ipv6hdr有通常的定义。
如何从sk_buff中的IP网络header判断IP版本?
出于这个原因,无论是 ipv4 还是 ipv6,IP 版本号都编码在数据包的前 4 位中。使用 ipv4 指针 (ipv) 并检查 version
字段。
nf_ct_l3num(skb->nfct)
可以告诉你是IPv4还是IPv6,在这个skb的conntrack初始化之后。
我有 'struct sk_buff' 类型的 SKB,我试图确定数据包是 IPv4 还是 IPv6 类型。基本上我需要源 IP 地址,但不知道如何检查 iph 或 ipv6h 中的 'version' 字段,或者不知道它是否是检查 'version' 值的可靠方法。
网络 header 在我机器上的 sk_buff 实现中是:
union {
struct iphdr *iph;
struct ipv6hdr *ipv6h;
struct arphdr *arph;
unsigned char *raw;
} nh;
并且iphdr和ipv6hdr有通常的定义。
如何从sk_buff中的IP网络header判断IP版本?
出于这个原因,无论是 ipv4 还是 ipv6,IP 版本号都编码在数据包的前 4 位中。使用 ipv4 指针 (ipv) 并检查 version
字段。
nf_ct_l3num(skb->nfct)
可以告诉你是IPv4还是IPv6,在这个skb的conntrack初始化之后。