/*头文件部分*/
#include <winsock2.h> //windows 下 socket 通信所必须的函数库
#include <stdio.h> //C 语言标准库
#include <time.h> // 导入系统滴答计时器函数,为计算报文传输时间
#include <string.h> //字符串处理函数库
#include "ping.h" // 用户自己的函数声明与数据结构体定义内容导入
#pragma comment(lib,"ws2_32")
#define CMD_PARAM_HELP true
#define ICMP_ECHO 8
#define ICMP_ECHOREPLY 0
#define ICMP_MIN 8 //最小 8 字节的头
#define MAX_PACKET 1024 // 最大 ICMP 包长度
#define MAX_IP_HDR_SIZE 60
typedef struct iphdr {
unsigned int h_len:4; //4 位首部长度
unsigned int version:4; //IP 版本号,4 表示 IPV4
unsigned char tos; //8 位服务类型 TOS
unsigned short total_len; //16 位总长度(字节)
unsigned short ident; //16 位标识
unsigned short frag_and_flags; //3 位标志位
unsigned char ttl; //8 位生存时间 TTL
unsigned char proto; //8 位协议 (TCP, UDP 或其他)
unsigned short checksum; //16 位 IP 首部校验和
unsigned int sourceIP; //32 位源 IP 地址
unsigned int destIP; //32 位目的 IP 地址
}IpHeader;
// 定义 ICMP 首位
/************************************************
//主程序入口
************************************************/
typedef struct _ihdr {
BYTE i_type; //8 位类型
BYTE i_code; //8 位代码
USHORT i_cksum; //16 位校验和
USHORT i_id; //识别号(一般用进程号作为识别号)
USHORT i_seq; //报文序列号
ULONG timestamp; //时间戳
}IcmpHeader;
#define STATUS_FAILED 0xFFFF