ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:105.71KB ,
资源ID:15310249      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/15310249.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(发现网络中的主机课设Word下载.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

发现网络中的主机课设Word下载.docx

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