版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、网络协议编程课程设计指导教师: 学生班级: 网络10802 学生姓名: 学 号: 班内序号: 21 课设日期:2011/7/52011/7/12 目 录一、课程设计目的与任务3二、设计任务及要求31、raw模式的socket编程32、具体内容3三、需求分析4四、总体设计(流程图)5五、详细设计与实现6六、实现结果及结果分析11七、使用说明14八、课设小结14一、课程设计目的与任务网络协议编程课程设计是学习tcp/ip协议分析课程后的一个重要实践环节,是对学生进行的一次较为全面的网络协议分析应用程序设计训练。其基本目的是:(1)培养学生理论联系实际的设计思想,训练综合运用所学的基础理论知识,结合
2、生产实际分析和解决网络应用中基本问题的能力,从而使基础理论知识得到巩固和加深。(2)训练学生运用软件工程的原理、方法和工具完整地设计并开发一个网络应用系统,历练软件工程常规设计过程和基本方法。为将来的实际应用开发打好基础。(3)深层次掌握tcp/ip协议的基本原理与数据格式。(4)熟悉并掌握网络通信协议socket编程的方法。 二、设计任务及要求1、raw模式的socket编程ping程序是面向用户的应用程序,该程序使用icmp的封装机制,通过ip协议来工作为了实现直接对ip和icmp包进行操作,实验中使用raw模式的socket编程。熟悉socket的编程,包括基本的系统调用如socket、
3、bind等。2、具体内容1) 定义数据结构需要定义好ip数据报、icmp包等相关的数据结构2) 程序实现在windows环境下实现ping程序3) 程序要求在窗体文本框中输入: ping .其中为目的主机的ip地址,不要求支持域名,对是否带有开关变量也不做要求。不带开关变量时,要求返回4次响应。返回信息显示在窗体上: reply from .或 request timeout (无法ping通的情况) (3)实验步骤和注意事项1、 熟悉ip以及icmp协议的工作机制2、 熟悉raw模式的socket编程3、 编写ping的实现程序4、 编译环境中需要包括socket库 ws2_32.lib5、
4、 在模拟实现环境下调试并运行自己编写的ping程序三、需求分析在带界面的ping程序中最基本的需要是用以输入ip的文本框,显示reply的文本框和几个基本按钮。这个要事先知道在ping .后的reply要返回哪些内容,上面已经要求返回4次响应,每次相应的reply就以我们平时在doc下ping的结果为模板reply from .:bytes=xx ttl=xxx time=xxms.虽然要求为目的主机的ip地址,不要求支持域名但域名的转换还是蛮简单的固定代码就加上去了。也添加了两个清空的按钮以便于用户使用。四、总体设计(流程图)a ping b结 束将icmp封装到ip数据报中并发送给b计算校
5、验和、获取ip封装icmp接受b的回复判断接受字节数是否为0解析收到的报文核实收到的id号和发送的是否一致丢弃返回目地ip、字节数、ttl值、时间戳是否不一致一致五、详细设计与实现1.用vc新建一个mfc对话框工程,从控件中拖入静态文本右击属性修改id和标题,类似的再拖入其他的编辑框和按钮,在显示reply的编辑框的属性中要勾选只读,这样既可以无法修改reply又可以节省复制粘贴的代码。在界面大致完成的时候界面如下: 图一:完成界面结构因为默认的是白色所以在initlnstance()中添加setdialogbkcolor (rgb (128, 184, 223), rgb ( 0, 0 ,
6、150 ) );使得界面的背景色变为蓝色。 图二:改变背景bool cpingapp:initinstance()setdialogbkcolor (rgb (128, 184, 223), rgb ( 0, 0 , 150 ) );觉得通用的.ico图片不是我想要的便换了一张。在此时运行得到的界面效果是: 图三:没有任何的功能的蓝色界面效果2.接下来就是在.cpp文件中添加相应的代码以实现老师和自己的要求。首先是定义ip和icmp 的首部,这些代码是固定的所以直接复制粘贴了。typedef struct ip_hdr /定义ip首部 unsigned char h_verlen; /4位首部
7、长度,4位ip版本号 unsigned char tos; /8位服务类型tos unsigned short total_len; /16位总长度(字节) unsigned short ident; /16位标识 unsigned short frag_and_flags;/3位标志位 unsigned char ttl; /8位生存时间 ttl unsigned char proto; /8位协议 (tcp, udp 或其他) unsigned short checksum; /16位ip首部校验和 unsigned int sourceip; /32位源ip地址 unsigned int
8、 destip; /32位目的ip地址 ip_header; typedef struct icmp_hdr byte i_type; / icmp报文类型 byte i_code; / icmp代码 ushort i_cksum; / 校验和 ushort i_id; / 标志符 ushort i_seq; / 序号 ulong timestamp; / 时间戳 icmp_header;3.初始化void cpingdlg:onping() /初始化/ todo: add your control notification handler code hereint rect; wsadata
9、 wsadata; if (wsastartup(makeword(2,2), &wsadata) != 0 ) printf (wsastartup error!n); /如果初始化不成功则报错exit(0); socket sock4; for(int i=0; i h_addr_list0); icmp_header icmpheader; sockaddr_in addr_in,addr_from; char recvbuf1024; socki= socket(af_inet, sock_raw, ipproto_icmp); int ntimeout = 1000; /超时毫秒/设
10、置发送超时和接收超时setsockopt(socki, sol_socket, so_sndtimeo, (char*)&ntimeout, sizeof(ntimeout); setsockopt(socki, sol_socket, so_rcvtimeo, (char*)&ntimeout, sizeof(ntimeout); memset(&addr_in, 0, sizeof(addr_in); addr_in.sin_family = af_inet; /为网络地址类型,一般为af_inetaddr_in.sin_addr.s_un.s_addr = inet_addr(ip);
11、/ip/设置数据报头memset(&icmpheader, 0, sizeof(icmpheader); icmpheader.i_type = 8; icmpheader.i_code = 0; icmpheader.i_cksum = 0; icmpheader.i_id = (ushort)getcurrentprocessid(); icmpheader.i_seq = 0; icmpheader.timestamp = gettickcount(); icmpheader.i_cksum = checksum(ushort*)&icmpheader, sizeof(icmpheade
12、r); /发送一个icmpheaderrect = sendto(socki, (char*)&icmpheader, sizeof(icmpheader), 0, (sockaddr*)&addr_in, sizeof(addr_in); int addr_from_len; addr_from_len = sizeof(addr_from); /接收的数据报为ip头+icmp头rect = recvfrom(socki, recvbuf, sizeof(recvbuf), 0, (sockaddr*)&addr_from, &addr_from_len);/rect为接收的字节数 if(r
13、ect0)/正确就调用decodeheader输出decodeheader(recvbuf, rect); else cstring reply=request timeout!;setdlgitemtext(idc_reply,reply);closesocket(socki); wsacleanup(); 用于初始化各个全局变量,为全局变量赋初始值;初始化,加载库。定义一个cstring reply用以输出。例如当超时时便输出request timeout!cstring reply=request timeout!;setdlgitemtext(idc_reply,reply);域名转换
14、:hostent *hp=gethostbyname(ip);/域名转换成ipif(hp!=null)ip=inet_ntoa(*(struct in_addr*)hp- h_addr_list0); 4.在cdlg中添加函数ushort cpingdlg:checksum(ushort *buffer, int size) 图四:添加cheksum()函数checksum()函数用于计算校验和。计算过程是首先把数据报头中的校验和字段设置为0,然后对首部中每个16bit 进行二字段进制反码求和(整个首部看成是由一串16bit的字组成),结果存在校验和字段中。其中buffer 用于存放icmp数
15、据,size表示icmp报文大小。ushort cpingdlg:checksum(ushort *buffer, int size)unsigned long cksum=0; while(size 1) cksum+=*buffer+; size -=sizeof(ushort); if(size ) /若size为奇数 cksum += *(uchar*)buffer; cksum = (cksum 16) + (cksum & 0xffff); cksum += (cksum 16); return (ushort)(cksum); 5.添加函数void cpingdlg:decode
16、header(char *buf, int len)解读报头函数在初始化中if(rect0)decodeheader(recvbuf, rect); 即正确时就调用decodeheader输出 if (icmpheader-i_id != (ushort)getcurrentprocessid() /核实收到的id号和发送的是否一致 printf(someone elses packet!n);return; cstring reply;reply.format(reply from %s: bytes= %d ttl = %d time= %d ms.rn, inet_ntoa(addr),
17、 len, ipheader-ttl, time1-icmpheader-timestamp);m_reply+=reply;setdlgitemtext(idc_reply,m_reply+ping is complete!);/sleep(500);6.添加自己加上去的小函数重置:因为输入ip/域名的id设为了idc_ip所以getdlgitem(idc_ip)-setwindowtext();便可以实现重置ip/域名六、实现结果及结果分析在运行后产生.exe文件双击此文件便可运行。1.用本机测试: ping ttl即为生存值,每经过一个路由器值便减少1,因为127.0.
18、0.1为本机所以没有经过任何一个路由器,故为最大值128,time为时间戳,在本机变为0.2.在断网时无法访问百度故抛出异常 ping 3.联网时 ping 要访问百度用的是域名,先经过转换为ip。因为访问百度必然是要经过路由器所以ttl值小于128,时间戳也会不一样。4.重置 当不想ping这个ip或者域名时单击这个“重置”按钮。七、使用说明直接在“ip/域名:”后面的编辑框中输入ip或者域名,点击“ping”按钮即可在下面只读的蓝色编辑框中显示回复的信息。如果不想ping某一个ip或者域名可以点击“重置”键可再次输入ip或者域名。因为清空键(clear)的设置问题貌似是实现了清空但在没有关闭的情况下上一次的显示结果在下一次还是会再次显示。八、课设小结 tcp/ip这
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024工程招标合同范本
- 2024年度云服务租赁合同
- 公司春节晚会活动策划3篇
- 2024年度智能家居安防监控系统安装与维护合同
- 2024年商业物业管理合同
- 2024双方关于环保设备的买卖合同
- 2024年废物分类与回收协议
- 2024年度CFG桩基工程项目管理合同
- 2024年度产品质量保证与维修服务合同
- 2024年夫妻双方关于房产买卖及产权分配协议
- 2024版人教版英语初一上单词默写单
- 化学实验室安全智慧树知到期末考试答案2024年
- 经典房地产营销策划培训(全)
- 工人入场安全教育课件
- 【川教版】《生命 生态 安全》二年级上册第12课 少点儿马虎 多点儿收获 课件
- 人教版数学四年级上册第五单元 《平行四边形和梯形》 大单元作业设计
- 静配中心差错预防
- 送教上门体育、健康教案教学内容
- 高夫品牌市场分析报告
- 职业规划书-数字化设计与制造技术
- 国家临床重点专科建设项目申报书
评论
0/150
提交评论