《网络协议编程》课程设计报告ICMP扫描程序的设计与实现.doc
《《网络协议编程》课程设计报告ICMP扫描程序的设计与实现.doc》由会员分享,可在线阅读,更多相关《《网络协议编程》课程设计报告ICMP扫描程序的设计与实现.doc(24页珍藏版)》请在三一办公上搜索。
1、长沙理工大学网络协议编程课程设计报告帅哥 学 院 计通学院 专 业 网络工程 班 级 网络08-02班 学 号 200858080110 学生姓名 帅 哥 指导教师 刘 青 课程成绩 完成日期 2011年6月15日 课程设计成绩评定学 院 计通学院 专 业 网络工程 班 级 网络08-02班 学 号 200858080110 学生姓名 帅哥 指导教师 刘 青 完成日期 2011年7月2日 指导教师对学生在课程设计中的评价评分项目优良中及格不及格课程设计中的创造性成果学生掌握课程内容的程度课程设计完成情况课程设计动手能力文字表达学习态度规范要求课程设计论文的质量指导教师对课程设计的评定意见综合成
2、绩 指导教师签字 2011年 月 日课程设计任务书计算机与通信工程学院 网络工程专业 课程名称网络技术课程设计时间20102011学年第二学期1718周学生姓名帅哥指导老师刘青题 目ICMP扫描程序的设计与实现主要内容:(1)了解ICMP协议,知道ICMP协议的概念,内容,重要性等。(2) 学会编写ICMP扫描程序。要求:(1)综合运用计算机网络基本理论和编程语言设计本系统。(2)学会文献检索的基本方法和综合运用文献的能力。(3)通过课程设计培养严谨的科学态度,认真的工作作风和团队协作精神。应当提交的文件:(1)课程设计学年论文。(2)课程设计附件(相关图纸、设备配置清单、报告等)。ICMP扫
3、描程序的设计与实现学生姓名:帅哥 指导教师:刘青摘要:我们常用Ping程序来判断一个特定的主机是否处于活动状态.该程序发送一个ICMP回应请求报文给主机,然后等待返回的ICMP报文回应应答就可以知道自己是否能成功的访问到那台机器.本次课程设计涉及到MFC的应用,要在充分了解套接字的实现以及IP,ICMP的格式,功能等的基础上才能实现此设计。关键字:ICMP;扫描;程序;协议;目 录1 引言31.1 课程设计目的31.2 课程设计要求32 概要设计42.1 设计原理42.2 数据结构设计42.3 系统流程图63 详细设计83.1 ICMP报文分析83.2 程序功能分析94 测试结果124.1 遇
4、到问题124.2 测试结果125 结束语13参考文献14附录及源代码151 引言1.1 课程设计目的IP协议的优点是简单,但缺少差错控制和查询机制,而网际控制报文协议(ICMP具有补充IP功能的作用。在网络管理中,常常要确定当前网络在红处于活动状态的主机,这时可以通过ICMP的回送和回送响应消息来完成这项工作。这课程设计的目的就是编制程序,利用ICMP数据包,发现网络中的活动主机,即ping消息的请求和应答。通过课程设计,熟悉ICMP报文的结构,对ICMP协议有更好的理解和认识,培养综合运用网络知识解决实际问题能力。1.2 课程设计要求设计程序,其功能是发送ICMP数据包,以获取指定望段中的活
5、动主机,并将结果显示在标准输出设备上程序的具体要求如下:1用命令形式运行scanhost为程序名;start_ip为被搜索网段;end_ip为被搜索网段的结束IP地址。如在命令行输入 scanhost 192.168.0.1 192.168.0.1002输出格式活动主机1的IP地址活动主机2的IP地址 活动主机 n的IP地址2 概要设计2.1 设计原理本程序使用的原始套接字生成ICMP请求/应答报文来进行活动主机的探查。这个程序使用的是回送请求和应答消息。程序的大致思想是把ICMP的数据报类型设置为回送请求,将它发送给网络上的一个IP地址,如果这个IP地址已经被占用的话,那么使用位于这个IP地
6、址的主机上的TCP/IP软件就能接受到这个ICMP回送请求,从而返回一个ICMP回送请求(类型号为0)信息。信息封装在一个IP包中,我们需要解析该IP包,从中找到ICMP数据信息,相反,如果这个IP地址没有人使用,那么发送的ICMP回送请求在设定的延时内就不可能得到响应。2.2 数据结构设计 2.2.1IP头部数据结构typedef struct iphdr unsigned int headlen:4; /ip头长度 unsigned int wersion:4; /ip版本号 unsigned char tos; /服务类型unsigned short totallen; /ip包总长度u
7、nsigned short id; /ip号unsigned short flag; /标记unsigned char ttl; /生存时间unsigned char prot; /协议(UDP TCP)unsigned short checksum; /校验和unsigned int sourceip; /源ipunsigned int destip; /目的ipIpHeader;2.2.2ICMP头部数据结构 typedef struct icmphdr BYTE type; /icmp类型码,回送请求的类型码为8 BYTE code; /子类型码,保存与特定ICMP报文类型相关的细节信息
8、 USHORT checksum; /校验和 USHORT id; /ICMP报文id号 USHORT seq; /ICMP数据报的序列号Icmpheader;2.3 系统流程图2.3.1主流程图 (图1) 开 始构造原始套接字,并初始化建立并初始化木的主机的Sockaddr_in数据结构dest起始IP地址-start_ip结束IP地址-end ip将start_ip填入到dest中start_iptype=icmp_echo; /设置类型 icmp_hdr-id=(ushort)getcurrentthreadid(); /设置其ID号为当前线程号 datapart=icmp_data+s
9、izeof(icmpheader); /计算出ICMP数据报的数据部分memset(datapart,A,datasize-sizeof(icmphearder); /填入数据 ((IcmpHeader*)icmp_data)-seq=0; /序列号 ((IcmpHeader*)icmp_data)-check_sum=0; /先将检验和置0((IcmpHead*)icmp_data)-checksum=checksum(USHORT*) icmp_data,data_size);Checksum 为计算校验和的函数,设校验和初值为0,然后对数据每16位求异或,结果取反,便得校验和。其代码如下
10、:unsinged long cksum=0;while (size1)cksum+=*buffer+;size-=sizeof(ushort);if(size)cksum+=*(uchar)buffer;cksum=(cksum16)+(cksum&0xffff);cksum+=(cksum16);return (ushort)(cksum); 填充ICMP报文之后,应在ICMP报文之前加上IP报头并发送出去。可调用下面的代码发送数据包。注意,这里的dest是填入目的主机的IP地址的一个sockaddr_in数据结构,IP_STRING是目的的主机的IP地址字符串。 Struct socka
11、ddr_in_dest; Dest.sin_family=AF_INET; Dest.sin_addr.s_addr=inet_addr(IP_STRING); Sendto(sockraw,icmp_data,datasize,0,(sockaddr*)&dest,size of(dest);3.2.4解析数据包 如果所ping的目的主机存在,那么它会发出一个回送应答包。这是一个IP包,受到后解析此数据包并获得其中的ICMP信息。根据IP报头信息中的IP报头长度字段,就可以得到ICMP报文的真实地址。ICMP数据包中的IP地址就是活动主机的IP。代码分析如下: #define ICMP_MI
12、N 8 #define MAX_PING_PACKET_SIZE(MAX_PACKET+sizeof(IpHeader) char *recvbuf=newMAX_PING_PACKET_SIZE; struct sockaddr_in dest,from,end;int formlen=sizeof(from); int bytes=recvfrom(sockraw,recvbuf,MAX_PACKET,0,(Struct sockaddr*)&from,&fromlen) ipheader *iphdr; icmpheader *icmphdr; unsigned short iphdrl
13、en; iphdr=(ipheader*)buf; iphdrlen=iphdr-headlen*4; /IP报头的长度 icmphdr=(icmpheader *)(buf+iphdrlen); /跳过IP头 /数据包太短 丢弃 if(bytestype!=icmp_echo_reply) return; /ID不相符,丢弃if(icmphdr-id!=(USHORT)getcurrentthreadid() return; /输出正在使用的IP地址 cout活动主机sin_addr)endl;4 测试结果4.1 遇到问题1 找不到头文件。因为头文件存放位置错误。2 变量没有定义。因为变量没
14、有定义和变量名书写写错。3 指针书写错误。4 宏参数列表错误。5 结构体指针传递错误。Cannot covert from struct iphdr * to struct icmphar * ip Ipheader * iphdr.因为缺少成员运算符”.”。4.2 测试结果 经反复调试,运行正常,运行结果如下(图5)5 结束语回顾过去的一个星期,有紧张,有忙碌,有苦恼,也有欢笑,在不断的改进与努力中,终于可以实现利用ICMP发现网络上的活动主机。通过这次课程设计,我加深了对ICMP协议的理解,巩固了课堂知识,为以后学习网络协议打下基础。在课程设计中,我和搭档李宝详配合的很融洽,相互帮助,共同
15、进步。在调试过程中难免要出现一些问题,为了能够快速地确定错误的原因,尽快的排除程序逻辑错误,通常把程序错误划分为三种类型:语法错误、运行错误和逻辑错误。在这次网络课程设计中,也发生了这样那样的错误,如变量没有定义、缺少头文件。通过查阅文献资料、请教老师和同学讨论,以及自己认真地分析与思考,逐一对错误进行了调试,使程序基本能正常运行,大体上符合了设计的意图和设计的要求。由于网络协议比较抽象,比较难学,也学得不深入,何况还要把所学知识运用到实践中来,真是一大难题,所以一开始时,真是有点一筹莫展,网上查有关资料却总觉得不搭干。通过这次课程设计,我明白做什么事都要沉得下心,在搞任何研发工作时,遇到问题
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络协议编程 网络 协议 编程 课程设计 报告 ICMP 扫描 程序 设计 实现

链接地址:https://www.31ppt.com/p-2385761.html