我写了一个netfilter post-routing hook来了解IGMP数据包。我注意到IGMP数据包正在击中路由后链,但是当我尝试访问skb-> sk值时,该值无效。有没有理由说IGMP数据包没有struct sock引用它。以下是我正在使用的代码,
static unsigned int hook_ipv4(void *priv,struct sk_buff *skb,const struct nf_hook_state *state) {
struct iphdr *ipheader = NULL;
if ( (skb) && (skb->sk) ) {
ipheader = (struct iphdr *)skb_network_header(skb);
if ( (ipheader) && (ipheader->protocol == IPPROTO_IGMP) ) {
printk("IGMP packet");
}
}
}
因此控件不会粘贴'if((skb)&&(skb-> sk))'语句。当我在if语句中删除'(skb-> sk)'条件时,控件传递if和printk语句。我假设sk在第一种情况下为空。虽然我可以获得结构sock引用tcp,udp。我无法获得IGMP的sk参考。 重现它当我们打开youtube时,会发送IGMPv3数据包。请提供一些见解。谢谢!