跟着网上的代码试着敲了一遍,熟悉Ping的过程。在debug中建立一个快捷方式,以管理员身份运行。否则,会创建socket不成功。
Ping.h
//Ping.h
//Define the header of IP and ICMP
#pragma pack(1)
#define ICMP_ECHOREPLY 0
#define ICMP_ECHOREQ 8
typedef struct tagIPHDR//the header of IP
{
u_char VIHL; //vesion(4)+header(4)
u_char Tos; //Tos(8)
short TotLen; //total length
short ID; //identifier(16)
short FlagOff; //flag(3)+offset(13)
u_char TTL; //Time to live(8)
u_short CheckSum; //checksum(16)
in_addr iaSrc; //source IP(32)
in_addr iaDst; //destination IP(32)
}IPHDR, *PIPHDR;
typedef struct tagICMPHDR
{
u_char Type; //Type(8)
u_char Code; //Code(8)
u_short Checksum; //CheckSum(16)
u_short ID; //identifier(16)
u_short Seq; //Sequence Number(16)
char Data; //Data
}ICMPHDR, *PICMPHDR;
const int REQ_DATASIZE = 32;
//ICMP echo request data struct
typedef struct tagECHOREQUEST
{
IC