#ifndef _PING_H_
#define _PING_H
#include <WinSock2.h>
#include <stdlib.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
#define ICMP_SIZE 32
//ICMP header structure
typedef struct _ICMP_HDR
{
BYTE type;
BYTE code;
USHORT checksum;
USHORT id;
USHORT seq;
}ICMP_HDR;
//ping option informatiom structure
typedef struct _IP_OPTION_INFORMATION
{
unsigned char ttl;
unsigned char tos;
unsigned char flags;
unsigned char options_size;
unsigned char *options_data;
}IP_OPTION_INFORMATION, *PIP_OPTION_INFORMATION;
//ping echo reply structure
typedef struct _IP_ECHO_REPLY
{
DWORD address;
unsigned long status;
unsigned long round_trip_time;
unsigned long data_size;
unsigned long reserved;
void *data;
IP_OPTION_INFORMATION options;
}IP_ECHO_REPLY, * PIP_ECHO_REPLY;
BOOL InitWinsock(void);
BOOL ResolveIp(char* hostname);
void PrinfHelp();
BOOL ResolveParam(int argc, char** argv
,char* hostname, unsigned int& ncount, unsigned int& timeout);
typedef HANDLE (WINAPI* picf)(void);
typedef BOOL (WINAPI* pich)(HANDLE);
typedef DWORD (WINAPI* pise)(HANDLE, struct in_addr, LPVOID, WORD, PIP_OPTION_INFORMATION
,LPVOID, DWORD, DWORD);
#endif
#include "Ping.h"
int main(int argc, char* argv[])
{
PIP_ECHO_REPLY pIpe= NULL;
struct in_addr hostaddr;
HINSTANCE hIcmp= NULL;
HANDLE hPing= NULL;
DWORD status= 0;
char szHostName[MAX_PATH]= {0};
char ping_buf[ICMP_S