文档介绍:举例:在d盘Cmd>d:>cd计算机网络ping程序>cddebug>就可以看到结果/*导入库文件*/#ment(lib,"")/*加载头文件*/#include<>#include<>#include<>#include<>#include<>/*定义常量*//*表示要记录路由*/#defineIP_RECORD_ROUTE0x7/*默认数据报大小*/#defineDEF_PACKET_SIZE32/*最大的ICMP数据报大小*/#defineMAX_PACKET1024/*最大IP头长度*/#defineMAX_IP_HDR_SIZE60/*ICMP报文类型,回显请求*/#defineICMP_ECHO8/*ICMP报文类型,回显应答*/#defineICMP_ECHOREPLY0/*最小的ICMP数据报大小*/#defineICMP_MIN8/*自定义函数原型*/voidInitPing();voidUserHelp();voidGetArgments(intargc,char**argv);USHORTCheckSum(USHORT*buffer,intsize);voidFillICMPData(char*icmp_data,intdatasize);voidFreeRes();voidDecodeIPOptions(char*buf,intbytes);voidDecodeICMPHeader(char*buf,intbytes,SOCKADDR_IN*from);voidPingTest(inttimeout);/*IP报头字段数据结构*/typedefstruct_iphdr{unsignedinth_len:4;/*IP报头长度*/unsignedintversion:4;/*IP的版本号*/unsignedchartos;/*服务的类型*/unsignedshorttotal_len;/*数据报总长度*/unsignedshortident;/*惟一的标识符*/unsignedshortfrag_flags;/*分段标志*/unsignedcharttl;/*生存期*/unsignedcharproto;/*协议类型(TCP、UDP等)*/unsignedshortchecksum;/*校验和*/unsignedintsourceIP;/*源IP地址*/unsignedintdestIP;/*目的IP地址*/}IpHeader;/*ICMP报头字段数据结构*/typedefstruct_icmphdr{BYTEi_type;/*ICMP报文类型*/BYTEi_code;/*该类型中的代码号*/USHORTi_cksum;/*校验和*/USHORTi_id;/*惟一的标识符*/USHORTi_seq;/*序列号*/ULONGtimestamp;/*时间戳*/}IcmpHeader;/*IP选项头字段数据结构*/typedefstruct_ipoptionhdr{unsignedcharcode;/*选项类型*/unsignedcharlen;/*选项头长度*/unsignedcharptr;/*地址偏移长度*/unsignedlongaddr[9];/*记录的IP地址列表*/}IpOptionHeader;/*定义全局变量*/SOCKETm_socket;IpOptionHeaderIpOption;SOCKADDR_INDestAddr;SOCKADDR_INSourceAddr;char*icmp_data;char*recvbuf;USHORTseq_no;char*lpdest;intdatasize;BOOLRecordFlag;doublePacketNum;BOOLSucessFlag;/*初始化变量函数*/voidInitPing(){WSADATAwsaData;icmp_data=NULL;seq_no=0;recvbuf=NULL;RecordFlag=FALSE;lpdest=NULL;datasize=DEF_PACKET_SIZE;PacketNum=5;SucessFlag=FALSE;/*Winsock初始化*/if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0){/*如果初始化不成功则报错,GetLastError()返回发生的错误信息*/printf("WSAStartup()failed:%d\n",GetLastError());return;}m_socket=INVALID_SOCKET;}/*显示信息函数*/voidUserHelp(