icmp.h
//
// Created by Victor on 2020/2/20.
//
#ifndef VPING_ICMP_H
#define VPING_ICMP_H
#include
#include
/**
ICMPv4 Header
*/
typedef struct ICMPHeader{
uint8_t type;
uint8_t code;
uint16_t checksum;
}ICMPHeader;
/**
Destination Unreachable Message "目的不可达消息格式"
type:消息类型,此处值为3。
Code:0 = net unreachable;网络不可达
1 = host unreachable;主机不可达
2 = protocol unreachable;协议不可达
3 = port unreachable; 端口不可达,Tracert时发送的ICMP报文即为此类。
4 = fragmentation needed and DF set;需要进行分片但设置不分片比特
5 = source route failed.源站选路失败
6 = Destination network unknown目的网络不认识
7 = Destination host unknown目的主机不认识
8 = Source host isolated (obsolete)源主机被隔离(作废不用)
9 = Destination network administratively prohibited目的网络被强制禁止
10 = Destination host administratively prohibited目的主机被强制禁止
11 = Network unreachable for TOS由于TOS,网络不可达
12 = Host unreachable for TOS 由于TOS,主机不可达
13 = Communication administratively prohibited by filtering由于过滤,通信被强制禁止
14 = Host precedence violation主机越权
15 = Precedence cutoff in effect优先权中止生效
checkSum:检验和,使用和IP相同的加法校验和算法,但是ICMP校验和仅覆盖ICMP报文。
unused:4字节,未使用,必须填0。
data: Internet Header + 64 bits of Original Data Datagram
IP首部+原始数据包的前8字节:
1.IP首部:如果IP首部没有选项字段时为20字节
2.原始数据包的前8字节:UDP首部的8字节或者TCP首部的8字节。
该数据是主机用来匹配消息。对于更高层协议的用户端口号,原始数据包的前64比特的这些数据会被重组。
*/
#define ICMP_Type_Destin