文档详情

计算机网络课程设计代码程序.doc

发布:2017-12-16约6.63千字共7页下载文档
文本预览下载声明
六、程序代码 ● 文件scanhost.h #pragma pack(4) #pragma comment (lib,”Ws2_32.lib”) #define WIN32_LEAN_AND_MEAN #include winsock2.h #include stdio.h #include stdlib.h #include iostream.h #include stdio.h #include sys/timeb.h #include time.h /* The IP header */ Typedef struct iphdr { unsigned int headlen:4; //IP头长度 unsigned int version:4; //IP版本号 unsigned char tos; //服务类型 unsigned short totallen; //IP包总长度 unsigned short id; //ID号 unsigned short flag; //标记 unsigned char ttl; //生存时间 unsigned char prot; //协议(UDP TCP) unsigned short checksum; //校验和 unsigned int sourceIP; //源IP unsigned int destIP; //目的IP }IpHeader; //ICMP header Typedef struct icmphdr { BYTE type; //ICMP类型码,回送请求的类型码为8 BYTE code; //子类型码,保存与特定ICMP报文类型相关的细节信息 USHORT checksum; //校验和 USHORT id; //ICMP报文ID号 USHORT seq; //ICMP数据报的序列号 }IcmpHeader; #define ICMP_ECHO 8 //请求回送 #define ICMP_ECHO_REPLY 0 //请求回应 #define ICMP_MIN 8 //ICMP包头长度(最小ICMP包长度) #define STATUS_FAILED 0xFFFF //错误码 #define DEF_PACKET_SIZE 32 //缺省数据报长度 #define MAX_PACKET 1024 //最大数据块长度 //最大接收数据包长度 #define MAX_PING_PACKET_SIZE(MAX_PACKET+sizeof(IpHeader)) void fill_icmp_data(char *,int); //填充ICMP包 USHORT checksum(USHORT *,int); //校验和函数 void decode_resp(char *,int,struct sockaddr_in *); //找到此数据报IP地址 DWORD WINAPI FindIP(LPVOID pIPAddrTemp); //线程调用子函数 文件:scanhost.cpp #include “scanhost.h” WSADATA wsaData; //原始套接字 SOCKET sockRaw; //dest:搜索目的IP,from:接收ICMP包的源IP Struct sockaddr_in dest,from,end; //end:搜索终止IP,即输入第三个参数 int fromlen = sizeof(from); //接收ICMP包长度 char *recvbuf=new char[MAX_PING_PACKET_SIZE]; //接受ICMP包缓冲区 unsigned int addr=0; //IP地址 long ThreadNumCounter=0,ThreadNumLimit
显示全部
相似文档