




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上天津师范大学Tianjin University of Education网络课程设计所在学院: 信息技术工程学院 专 业: 计算机科学与技术 学 号: 学生姓名: 指导教师: 二一三年六月专心-专注-专业信息技术工程学院网络课程设计使用ICMP发现局域网内活动主机学生姓名:肖磊指导教师:黄彦 副教授 20 13 年 6月摘 要本程序使用原始套接字生成ICMP报文来进行活动主机的探查。这个程序使用的是回送请求与应答消息。程序的大致思想是把ICMP的数据包类型设置为回送请求,将它发送给网络上的一个IP地址,如果这个IP地址已经被占用的话,那幺使用位于这个IP地址的主机上
2、的TCP/IP软件就能够接收到这个ICMP回送请求,从而返回一个ICMP回送响应(类型号为0)信息。信息封装在一个IP包中,我们需要解析该IP包,从中找到ICMP数据信息。相反,如果这个IP地址没有人使用,那幺发送的ICMP回送请求在设定的延时内就不可能得到响应。在初始化原始套接字之后,本程序就要开始在一个IP网段内寻找活动主机。因为要寻找的主机可能很多,为节省时间可以采用多线程编程。 关键词: ICMP协议,Visual c+ 6.0目 录引 言IP协议的优点是简洁,但缺少差错控制和查询机制,而网际控制报文协议(ICMP)具有补充IP功能的作用。在网络管理中,常常要确定当前网络中处于活动状态
3、的主机,这时可以通过使用ICMP的回送和回送响应消息来完成这项工作。本课程设计的目的就是编制程序,利用ICMP数据包,发现指定网段中的活动主机。通过课程设计,更加熟悉ICMP报文的结构,对ICMP协议有更好的理解和认识。1 课程设计相关技术1.1 ICMP报文格式及类型编制程序前首先要对ICMP报文的格式有一定的了解,ICMP报文是在IP数据报内部传输的,其结构如图10-1所示。 IP数据报 IP首部 ICMP报文 图10-1 ICMP封装在IP内部0 7 8 15 16 31(位)类型字段代码字段校验和字段(不同类型和代码有不同内容)图10-2 ICMP报文ICMP报文的格式如图10-2所示
4、。所有报文的前4个字节都是一样的,但是其它字节则互不相同。其中类型字段可以有15个不同的值,以描述特定类型的ICMP报文,某些ICMP报文还使用代码字段的值来进一步描述不用的条件。按验和字段为2字节,校验的范围是整个ICMP报文。检验和是必须的,其计算方法与IP协议头部校验和的计算方法一样。 各种类型的ICMP报文如图10-3所示(ICMP报文类型),不同类型由报文中的类型字段和代码字段来共同决定。类 型 代 码 描 述 0 0 回送响应(PING应答)3 目的不可达0 网络不可达1 主机不可达2 协议不可达3 端口不可达4 需要进行分片但设置了禁止分片比特5 源主机选择路由失败6 无法识别目
5、的网络7 无法识别目的主机8 源主机被隔离9 目的网络被禁止10 目的主机被禁止11 由于服务类型(TOS),网络不可达12 由于服务类型(TOS),主机不可达13 由于过滤,通信被强行禁止14 主机越权15 优先权终止生效 4 0 源端被关闭(基本流控制)5 重定向0 对网络重定向1 对主机重定向2 对服务类型和网络重定向3 对服务类型和主机重定向 8 0 回送请求(PING请求)9 0 路由器通告10 0 路由器请求11 超时0 传输期间生存期减为01 数据报组装期间生存期减为012 参数问题0 各种IP头部错误1 缺少必须的选项13 0 时间戳请求14 0 时间戳应答15 0 信息请求(
6、已作废)16 0 信息应答(已作废)17 0 地址掩码请求18 0 地址掩码应答10-3 ICMP报文类型本课程设计的目的是发现网络中的活动主机,就是使用ICMP的回送和回送响应消息发现网络中的活动主机,即Ping消息的请求和应答。那幺,发送的ICMP的数据包类型设置为回送请求(类型号为8)。1.2实验平台介绍Visual C+ 6.0,简称VC或者VC6.0,是推出的一款C+,将“高级语言”翻译为“(低级语言)”的程序。Visual C+是一个功能强大的可视化。自1993年Microsoft公司推出Visual C+1.0后,随着其新版本的不断问世,Visual C+已成为专业进行开发的首选
7、工具。Visual C+6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。 这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。2 课程设计过程2.1 使用原始套接字为了实现发送/监听ICMP报文,必须使用原始套接字,创建原始套接字的代码如下: socket sockRaw; sockRaw = WSAocket (AF_INET, sock_Raw, IPPROTO_ICMP, NULL, 0, WSA_FLAG_OVERLAPPED); 在WSASocket函数中,我们使用IPPROTO_ICMP表
8、示接收ICMP数据包,为了使用发送超时设置(设置SO_RCVTIMEO或SO_SNDTIMEO),必须将标志位置为WSA_FLAG_OVERLAPPED。然后调用setsockopt函数设置读取延迟。 Int timeout=1000;setsockopt(sockRaw,SQL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeout);setsockopt(sockRaw,SQL_socket,SO_SNDTIMEO,(char*)&timeout,sizeof(timeout); 在setsockopt函数中,sockRaw是之前
9、创建的原始套接字,设置SQL_SOCKET表明使用基本套接字处理ICMP报文。设置SO_RCVTIMEO表示使用接收超时设置,SO_SNDTIMEO表示使用发送超时设置,在这里,超时时间均设置为1000ms。2.2 定义IP头部和ICMP头部的数据结构 由于socket发送/捕获的是IP包,因此要分别定义IP头部的数据结构ICMP头部数据结构。 /IP报头的数据结构 typedef struct iphdrunsigned int headlen:4; /IP头长度unsigned int version:4; /IP版本号unsigned char tos; /服务类型unsigned sh
10、ort totallen; /IP包总长度 unsigned short 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 icmphdr BYTE type; /ICMP类型码,回送请求的类型码为8 BYTE code; /子类型码,保
11、存与特定ICMP报文类型相关细节信息 USHORT checksum; /校验和 USHORT id; /ICMP报文ID号(一般用进程号作ID) USHORT seq; /ICMP数据报的序列号IcmpHeader;2.3 填充并发送回送请求类型的ICMP报文为了使收到数据包的目的主机发送响应,我们需要向目的主机发送回送请求类型的ICMP报文。从图10-3中可知,回送请求的类型号为8。因此ICMP报文的填充代码如下:#define ICNP_ECHO 8 /请求回送#define DEF_PACKET_SIZE 32 /缺省数据报长度#define MAX_PACKET 1024 /最大数据
12、块长度char icmp_dataMAX_PACKET; /ICMP数据报最大可能的长度memset(icmp_data,0,MAX_PACKET); /将数据报清空初始化int datasize=DEF_PACKET_SIZE; /ICMP数据报报文体的缺省长度datasize+=sizeof(IcmpHeader); /再加上ICMP头部的长度IcmpHeader*icmp_hdr:Char *datapart;icmp_hdr = (IcmpHeader*)icmp_data;icmp_hdr->type = ICMP_ECHO; /设置类型icmp_hdr->id = (U
13、SHORT)GetCurrentThreadId(); /设置其ID号为当前线程号Datapart = icmp_data + sizeof(IcmpHeader); /计算出数据报的数据部分Memset(datapart,A,datasize-sizeof(IcmpHeader); /填入数据(IcmpHeader*)icmp_data)->seq= 0; /序列号为0(IcmpHeader*)icmp_data)->checksum = 0; /先将校验和置0(IcmpHeader*)icmp_data)->checksum=checksum(USHORT*)icmp_d
14、ata,datasize);checksum为校验和的函数,设校验和初值为0 ,然后对数据每16为求异或,结果取反,便得校验和。其代码如下: USHORT checksum(USHORT *buffer, int size) /计算校验和 unsigned long cksum = 0; while(size>1) cksum+=*buffer+; size -=sizeof(USHORT);if(size) cksum +=*(UCHAR*)buffer; cksum = (cksum >> 16)+(cksum & 0xffff);cksum +=(cksum &
15、gt;> 16);return(USHORT)(-cksum); 填充ICMP报文之后,应在ICMP报文之前加上IP报头并发送出去。可调用下面的代码发送数据包。注意,这里的DEST是填入目的主机IP地址的一个sockaddr_in数据结构,IPSTRING是目的主机的IP地址字符串。 struct sockaddr_in dest; dest.sin_family = AF_INET; dest.sin_addr.s_addr = inet_addr(IP_STRING); /填入搜索的IP地址 sendto(sockRaw,icmp_data,datasize,0,(sockaddr*
16、)&dest,sizeof(dest);2.4程序流程图开 始将Start_IP添入到dest中起始IP地址Start_IP结束IP地址End_IP建立并初始化目的主机的Sockaddr_in数据结构dest构造原始套接字,并初始化Start_IPEnd_IP? N Y Y线程数目太多?等待一定时间 N创建一个线程并执行Start_IP+ Y 还有线程在执行?等待一定时间 N结 束 图1 主程序流程图开 始填充ICMP数据报发送数据报接收数报去掉IP报头,获取ICMP信息数据包太短? Y N不是回送响应? Y NID不符合? Y N输出数据报中的IP地址 结 束图2 子程序流程图结论通
17、过此次课程设计,我加深了对ICMP协议的理解,巩固了课堂知识。由于网络协议比较抽象、难学,自己学得也不够深入,加上还要把所学知识运用到实践中来,所以一开始时感觉比较困难,而且在调试过程中难免要出现一些如变量没有定义、缺少头文件、大小写错误以及其它问题,通过查阅文献资料、向同学请教以及认真地思考与分析,逐一对错误进行了调试,才使得程序能正常运行,大体上符合了设计的目的和要求。在程序的调试过程中,出现问题是正常的,关键是如何去发现问题的根源,然后去解决它。为了能够快速地确定错误的原因,尽快的排除程序错误,通常把程序错误划分为三种类型:语法错误、运行错误和逻辑错误。在设计过程中,我们可以先找出问题,
18、看是属于哪一类错误,然后再将问题一一解决,这样既解决了疑难问题又节省了不少时间。参考文献1 安淑芝,黄彦 .计算机网络 M . 北京:中国铁道出版社 .20112 吴功宜, 胡晓英, 张仁, 何云, 王宁编著. 计算机网络课程设计. 北京:机械工业出版社, 2010.83 吴功宜著. 计算机网络. 北京:清华大学出版社, 20044 陈坚, 陈伟. Visual C+网络高级编程M. 北京: 人民邮电出版社,20015 郭国强. 计算机网络与Internet教程. 北京: 清华出版社,2006.116 杨丰瑞, 杨丰任. 实用教程最新计算机网络. 北京: 中国铁道出版社,2001.7致谢在本课程设计论文即将完成之际,我想对所有曾经给过我帮助和支持的同学老师表示衷心的感谢。感谢我的老师对我课程设计的指导,书到用时方恨少,在这篇论文的写作过程中,我深感自己的水平还非常的欠缺。生命不息,学习不止,人生就是一个不断学习和完善的过程,敢问路在何方?路在脚下
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年海事专业技术资格考试试卷及答案
- 2025年投资理财师职业资格考试试题及答案
- 2025年金融市场学考试试卷及答案
- 2025年翻译专业八级考试题及答案
- 互联网艺术品鉴定与价值评估服务协议
- 娱乐行业替身保险补充合同细则
- 高端私人游艇专属泊位租赁管理服务合同
- 智能家居产品体验店加盟品牌授权与区域保护合同
- 智能家居研发项目保密补充协议
- 网络广告内容审查规范补充协议
- GB/T 45501-2025工业机器人三维视觉引导系统通用技术要求
- 2025年武汉数学四调试题及答案
- GB 19081-2025饲料加工系统粉尘防爆安全规范
- 2024年云南省初中学业水平考试地理试卷含答案
- 2024年全国高中数学联赛北京赛区预赛一试试题(解析版)
- 培训课件 -沟通的方法 -沟通训练营 脱不花
- 氨基转移酶检测临床意义和评价注意点
- 技能大师工作室成员协议范本书
- PICC专科护士进修学习汇报
- 工厂如何消除静电与防止静电实践篇
- 我学会了洗碗作文
评论
0/150
提交评论