Linux抓icmp包分析错误?

用Linux编程编写抓包协议,分析icmp报文的时候都是0

else if(p_iphdr->protocol==1){
        struct icmphdr*p_icmphdr=(struct icmphdr*)(p_iphdr+p_iphdr->ihl*4);
        if((p_icmphdr->icmp_type)==3||5||11||12){
            printf("----这个是ICMP差错报告报文----\n");

        }else{
            printf("----这个是ICMP询问报文----\n");
        }
        printf("type = %d\n ", p_icmphdr->icmp_type);
        printf("code = %d\n ", p_icmphdr->icmp_code);
        printf("id = %d\n ", p_icmphdr->icmp_id);
        printf("icmp_seq = %s\n ", ntohs(p_icmphdr->icmp_seq)); //输出序列号

这个是icmp结构体

struct icmphdr
{
    u_int8_t icmp_type;
    u_int8_t icmp_code;
    u_int16_t icmp_checksum;
    union
    {
        struct ih_idseq
        {
            u_int16_t icd_id;
            u_int16_t icd_seq;
        }ih_idseq;
    }icmp_hun;
#define icmp_id icmp_hun.ih_idseq.icd_id
#define icmp_seq icmp_hun.ih_idseq.icd_seq
    //u32  icmp_timestamp[2];//时间戳
    //ICMP数据占位符
    u_int8_t data[0];
};

结果是这样

图片说明

这个icmp报文是我用ping网站获取的
求大佬告知小白一个,感谢