1、 陈璞 专业班级: 软件1001 指导教师: 刘东飞 工作单位: 计算机学院 题目五: 发现网络中的主机 初始条件:(1)学习相关知识(2)C/C+/VC/VB/JAVA语言(3)PC机一台要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)编写程序,其功能是发送ICMP数据包,以获取指定网段中的活动主机,并将结果显示在标准输出上。程序具体要求如下:1)用命令行形式运行:scanhost Start_IP End_IP其中scanhost为程序名,Start_IP为被搜索网段的开始IP地址,End_IP为被搜索网段的结束IP地址。2)输出格式为:活动主机1活动主机
2、2.时间安排:第一、二天:查阅资料,学习算法第三、四天:编程调试第五天:书写报告 指导教师签名: 年 月 日系主任(或责任教师)签名:目 录一、设计目的与意义 4二、设计内容和要求 4三、设计相关技术 4四、设计相关过程 74.1程序的大致思想 74.2使用原始套接字 74.3定义IP头部和ICMP头部的数据结构 84.4填充并发送回送请求类型的ICMP报文 94.5计算校验和 94.6 IP包的发送 104.7解析数据包 10五、程序流程图 115.1主程序流程图 115.2子程序流程图 12六、程序运行结果与测试 13七、体会与总结 13八、参考文献 14附 录 14程序代码清单 14一、
3、设计目的与意义IP协议的优点是简洁,但缺少差错控制和查询机制,而网际控制报文协议(ICMP)具有补充IP功能的作用。在网络管理中,常常要确定当前网络中处于活动状态的主机,这时可以通过使用ICMP的回送和回送响应消息来完成这项工作。本课程设计的目的是若一个机房的主机已经达到了一定数量,进行网络管理时,常常需要确定当前网络中处理活动状态的主机。本设计的目标就是编制程序,利用ICMP数据包,发现指定网段中的活动主机。通过课程设计,使学生更加熟悉ICMP报文的结构,对ICMP协议有更好的理解和认识。二、设计内容和要求设计程序,其功能是发送ICMP数据包,以获取指定网段中的活动主机,并将结果显示在标准输
4、出上。程序的具体要求如下: scanhost Start_IP End_IP其中scanhost为程序名;Start_IP为被搜索网段的开始IP地址;End_IP为被搜索网段的结束IP地址。 活动主机2活动主机3 三、相关技术 编制程序前首先要对ICMP报文的格式有一定的了解,ICMP报文是在IP数据报内部传输的,其结构如下图【1】所示: IP数据报 IP首部 ICMP报文 图【1】ICMP报文的格式如下图【2】所示:(位)0 7 8 15 16 31类型字段代码字段校验和字段(不同类型和代码有不同内容)图【2】ICMP报文格式所有报文的前4个字节都是一样的,但是其它字节则互不相同。其中类型字
5、段可以有15个不同的值,以描述特定类型的ICMP报文,某些ICMP报文还使用代码字段的值来进一步描述不用的条件。按验和字段为2字节,校验的范围是整个ICMP报文。检验和是必须的,其计算方法与IP协议头部校验和的计算方法一样。各种类型的ICMP报文如下图【3】所示(ICMP报文类型),不同类型由报文中的类型字段和代码字段来共同决定。类 型代 码描 述回送响应(PING应答)3目的不可达1245789101112131415网络不可达主机不可达协议不可达端口不可达需要进行分片但设置了禁止分片比特源主机选择路由失败无法识别目的网络无法识别目的主机源主机被隔离目的网络被禁止目的主机被禁止由于服务类型(
6、TOS),网络不可达由于服务类型(TOS),主机不可达由于过滤,通信被强行禁止主机越权优先权终止生效源端被关闭(基本流控制)重定向对网络重定向对主机重定向对服务类型和网络重定向对服务类型和主机重定向回送请求(PING请求)路由通告路由请求超时传输期间生存期减为0数据报组装期间生存期减为0参数问题各种IP头部错误缺少必须的选项时间戳请求时间戳应答17信息请求(已作废)信息应答(已作废)地址掩码请求地址掩码应答图【3】ICMP报文类型本课程设计的目的是发现网络中的活动主机,使用ICMP的回送和回送响应消息发现网络中的活动主机,即Ping消息的请求和应答。发送的ICMP的数据包类型设置为回送请求(类
7、型号为8);接收ICMP的数据包类型设计为回送应答(类型号为0)。四、设计相关过程4.1程序的大致思想本程序使用原始套接字生成ICMP报文来进行活动主机的探查,这个程序使用的是回送请求与应答消息。把ICMP的数据包类型设置为回送请求,将它发送给网络上的一个IP地址,如果这个IP地址已经被占用的话,那么使用位于这个IP地址的主机上的TCP/IP软件就能够接收到这个ICMP回送请求,从而返回一个ICMP回送响应(类型号为0)信息。信息封装在一个IP包中,我们需要解析该IP包,从中找到ICMP数据信息。相反,如果这个IP地址没有人使用,那幺发送的ICMP回送请求在设定的延时内就不可能得到响应。 在初
8、始化原始套接字之后,本程序就要开始在一个IP网段内寻找活动主机。因为要寻找的主机可能很多,为节省时间可以采用多线程编程。下面接结合核心代码对程序的具体实现进行讲解,同时为使程序流程更加清晰,去掉了错误检查4.2使用原始套接字为了实现发送/监听ICMP报文,必须使用原始套接字。在初始化原始套接字之后,本程序就要开始在一个IP网段内寻找活动主机。创建原始套接字的代码如下:SOCKET sockRaw;sockRaw=WSASocket(AF_INET,SOCK_RAW,IPPROTO_ICMP,NULL,0,WSA_FLAG_OVERLAPPED); 在WSASocket函数中,我们使用IPPRO
9、TO_ICMP表示接收ICMP数据包,为了使用发送超时设置(设置SO_RCVTIMEO或SO_SNDTIMEO),必须将标志位置为WSA_FLAG_OVERLAPPED。然后调用setsockopt函数设置读取延迟。int timeout=1000;setsockopt(sockRaw,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeout);setsockopt(sockRaw,SOL_SOCKET,SO_SNDTIMEO,(char*)&在setsockopt函数中,sockRaw是之前创建的原始套接字,设置SQL_SOCKET表明使用基
10、本套接字处理ICMP报文。设置SO_RCVTIMEO表示使用接收超时设置,SO_SNDTIMEO表示使用发送超时设置,在这里,超时时间均设置为1000ms。4.3定义IP头部和ICMP头部的数据结构 由于socket发送/捕获的是IP包,因此要分别定义IP头部和ICMP头部的数据结构。/IP报头的数据结构typedef struct iphdrunsigned int headlen:4; /IP头长度unsigned int version: /IP版本号unsigned char tos; /服务类型unsigned short totallen; /IP包总长度unsigned shor
11、t id; /ID号unsigned short flag; /标记unsigned char ttl; /生存时间unsigned char prot; /协议(UDP TCP)unsigned short checksum; /校验和unsigned int sourceIP; /源IPunsigned int destIP; /目的IPIpHeader;/ICMP头部的数据结构typedef struct icmphdrBYTE type; /ICMP类型码,回送请求的类型码为8BYTE code; /字类型码,保存与特定ICMP报文类型相关的细节信息USHORT checksum;US
12、HORT id; /ICMP报文ID号(一般用进程号作为ID)USHORT seq; /ICMP数据报的序列号IcmpHeader;4.4填充并发送回送请求类型的ICMP报文 为了使收到数据包的目的主机发送响应,我们需要向目的主机发送回送请求类型ICMP报文。因此ICMP报文的填充代码如下:#define ICMP_ECHO 8 /请求回送#define DEF_PACKET_SIZE 32 /缺省数据报长度#define MAX_PACKET 1024 /最大数据块长度char icmp_dataMAX_PACKET; /ICMP数据报最大可能的长度memset(icmp_data,0,MA
13、X_PACKET); /将数据报清空初始化int datasize=DEF_PACKET_SIZE; /ICMP数据报报文体的缺省长度datasize+=sizeof(IcmpHeader); /再加上ICMP头部的长度IcmpHeader *icmphdr;char *datapart;icmp_hdr=(IcmpHeader*)icmp_data;icmp_hdr-type=ICMP_ECHO; /设置类型id=(USHORT)GetCurrentThreadId(); /设置其ID为当前线程号datapart=icmp_data+sizeof(IcmpHeader); /计算ICMP数据报的数据部分memset(datapart,A,datasize-sizeof(IcmpHeader);/填入数据(IcmpHeader*)icmp_data)-checksum=0; /先将校验和置0seq=0; /序列号为0(IcmpHeader*)icmp_dat
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1