#include <stdio.h >
#include <winsock2.h >
#include <ws2tcpip.h >
#define ICMP_ECHO 8
/*定义IP报头数据结构*/
typedef struct iphdr {
unsigned char verlen; //头的版本和长度
unsigned char tos; //服务类型
unsigned short total_len; //整个包的长度
unsigned short ident; //唯一标示符
unsigned short frag_and_flags; //flags
unsigned char ttl; //生存时间
unsigned char proto; //protocol (TCP, UDP etc)
unsigned short checksum; //IP交验和
unsigned int sourceIP; //源地址
unsigned int destIP; //目标地址
} IPHDR;
/*定义ICMP报头数据结构*/
typedef struct icmphdr {
BYTE i_type; //类型,长度为8位
BYTE i_code; //编码,长度为8位
USHORT i_cksum; //校验,长度为16位
USHORT i_id; //标识符,用于唯一标识ICMP报文
USHORT i_seq; //顺序号,代表ICMP报文的发送顺序
} ICMPHDR;
//声明计算IP校验和函数cal_checksum
unsigned short cal_checksum( unsigned short *buf, i