用于IGMP数据包的Netfilter路由后挂钩具有无效的skb-> sk

时间:2018-06-07 18:33:59

标签: android linux linux-kernel netfilter igmp

我写了一个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数据包。请提供一些见解。谢谢!

0 个答案:

没有答案