ping包之ICMP报文格式分析

1,I C M P报文的格式。所有报文的前4个字节都是一样的,但是剩下的其他字节则互不相同。下面我们将逐个介绍各种报文格式. 

//ICMP头部,总长度4字节  
typedef struct _icmp_hdr  
{  
    unsigned char icmp_type;   //类型  
    unsigned char code;        //代码  
    unsigned short chk_sum;    //16位检验和  
}icmp_hdr; 

 不同类型的报文(8位类型+8位代码)

 (1)ping的request报文和reply报文分析:

//icmp报文(能到达目的地,响应-请求包)  
struct icmp8   
{  
    u_char icmp_type; //type of message(报文类型)  
    u_char icmp_code; //type sub code(报文类型子码)  
    u_short icmp_cksum;  
    u_short icmp_id;  
    u_short icmp_seq;  
    char icmp_data[1];  
};  

//icmp报文(能返回目的地,响应-应答包)  
struct icmp0   
{  
    u_char icmp_type; //type of message(报文类型)  
    u_char icmp_code; //type sub code(报文类型子码)  
    u_short icmp_cksum;  
    u_short icmp_id;  
    u_short icmp_seq;  
    char icmp_data[1];  
};  

 (2)不可达报文

 

//icmp报文(不能到达目的地)  
struct icmp3   
{  
    u_char icmp_type; //type of message(报文类型)  
    u_char icmp_code; //type sub code(报文类型子码),例如:0网络原因不能到达,1主机原因不能到达...  
    u_short icmp_cksum;  
    u_short icmp_pmvoid;  
    u_short icmp_nextmtu;  
    char icmp_data[1];  
};  

(3) icmp重发(重定向)

//icmp报文(重发结构体)  
struct icmp5   
{  
    u_char icmp_type; //type of message(报文类型)  
    u_char icmp_code; //type sub code(报文类型子码)  
    u_short icmp_cksum;  
    struct in_addr icmp_gwaddr;  
    char icmp_data[1];  
};  

(4)icmp超时

struct icmp11   
{  
    u_char icmp_type; //type of message(报文类型)  
    u_char icmp_code; //type sub code(报文类型子码)  
    u_short icmp_cksum;  
    u_int icmp_void;  
    char icmp_data[1];  
};  

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陌上花开缓缓归以

你的鼓励将是我创作的最大动力,

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值