Linux ping应答头

Linux ping应答头,linux,linux-kernel,Linux,Linux Kernel,我用hook函数制作了一个模块。它可以工作,但当我使用ping google.com时,我得到的是0045作为icmp类型。但我认为回音回复应该是0。我使用了以下打印命令: unsigned int hook_func(unsigned int hooknum, struct sk_buff *skb1, const struct net_device *in, const struct net_device *out, int (*okfn)(struct sk_buff *)) { stru

我用hook函数制作了一个模块。它可以工作,但当我使用ping google.com时,我得到的是0045作为icmp类型。但我认为回音回复应该是0。我使用了以下打印命令:

unsigned int hook_func(unsigned int hooknum, struct sk_buff *skb1, const struct net_device *in, const struct net_device *out, int (*okfn)(struct sk_buff *))
{
struct sk_buff *sock_buff;
 struct iphdr *ip1;
 struct icmphdr *icmp1;
 sock_buff = skb1;
//printk("ihere we are::%s,%d\n",__func__,__LINE__);
   ip1 = (struct iphdr *)skb_network_header(sock_buff);
 printk(KERN_ALERT"proto:%d\n",ip1->protocol);
if(ip1->protocol==1)
{
 icmp1 = (struct icmphdr *)skb_transport_header(sock_buff);
printk(KERN_ALERT"reply type: %04X,,seq : %04X\n",icmp1->type,icmp1->un.echo.id);
       }
// kfree(sock_buff);
return NF_ACCEPT;

  }
icmp1->类型为u be16。

替换
icmp1=(结构icmphdr*)skb_传输_头(sock_buff)带有

icmp1=(结构icmphdr*)(skb_传输_头(sock_buff)+ip_hdrlen(sock_buff))

icmpheader->type是无符号字符,请重试

printk(内核警报“回复类型:%u,顺序:%04X\n”,icmp1->type,icmp1->un.echo.id)