文档详情

基于ICMP的主机存活性探测原理与实现.docx

发布:2017-07-16约4.28千字共7页下载文档
文本预览下载声明
基于ICMP的主机存活性探测原理与实现工作原理ICMP是“InternetControlMessageProtocol(Internet控制消息协议)的缩写?它是TCP/IP协议族的一个子协议,用于在IP主机?路由器之间传递控制消息?控制消息是指网络通不通?主机是否可达?路由是否可用等网络本身的消息?这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用?2.程序设计(1)设计要求通过这次设计,要求了解TCP/IP的基本协议的工作原理和基本的网络编程知识,利用单(多)线程技术、API函数等编写服务和客户端应用程序,利用MFC提供的类编写较为复杂网络应用程序。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。? 主要代码 //定义ICMP结构体。typedef struct icmp_hdr{ unsigned char icmp_type; // 消息类型 unsigned char icmp_code; // 代码 unsigned short icmp_checksum; // 校验和 // 下面是回显头 unsigned short icmp_id; // 用来惟一标识此请求的ID号,通常设置为进程ID unsigned short icmp_sequence; // 序列号 unsigned long icmp_timestamp; // 时间戳} ICMP_HDR, *PICMP_HDR;typedef struct _iphdr { unsigned int h_len:4; //头长度 unsigned int version:4;//IP版本 unsigned char tos; //服务类型 unsigned short total_len;//包的总长度 unsigned short ident; //包标识身份 unsigned short frag_and_flags;//标志 unsigned char ttl; //包生命周期 unsigned char proto; //协议类型 unsigned short checksum; //IP校验 unsigned int sourceIP; //源IP unsigned int destIP; //目标IP }IPHeader; //设置最长存活期BOOL?CICMPDlg::SetTTL(SOCKET?s,?int?nValue){????int?ret?=?setsockopt(s,?IPPROTO_IP,?IP_TTL,?(char*)nValue,?sizeof(nValue));????return?ret?!=?SOCKET_ERROR;}//设置超时时间BOOL?CICMPDlg::SetTimeout(SOCKET?s,?int?nTime,?BOOL?bRecv){????int?ret?=?setsockopt(s,?SOL_SOCKET,?????????bRecv???SO_RCVTIMEO?:?SO_SNDTIMEO,?(char*)nTime,?sizeof(nTime));????return?ret?!=?SOCKET_ERROR;}//检查校验和USHORT?CICMPDlg::checksum(USHORT*?buff,?int?size){????unsigned?long?cksum?=?0;????while(size1)????{????????cksum?+=?*buff++;????????size?-=?sizeof(USHORT);????}????//?是奇数????if(size)????{????????cksum?+=?*(UCHAR*)buff;????}????//?将32位的chsum高16位和低16位相加,然后取反????cksum?=?(cksum??16)?+?(cksum??0xffff);????cksum?+=?(cksum??16);????????????????return?(USHORT)(~cksum);} UpdateData(true);int?count=m_list.GetItemCount();char?szDestIp[]?=?10.0.0.2;????//?127.0.0.1WSADATA?WSAData;if(WSAStartup(MAKEWORD(2,2),WSADa
显示全部
相似文档