《ping程序的设计与实现.doc》由会员分享,可在线阅读,更多相关《ping程序的设计与实现.doc(13页珍藏版)》请在金锄头文库上搜索。
1、计算机网络课程设计任务书 学 院计算机与信息工程专 业网络工程课程名称题 目基于原始套接字实现简单的ping程序完成期限自2014年8月25日至2014年8月30日共1周内容及任务一、项目的目的通过设计Ping程序,理解Ping程序的实现原理,并初步讲解了c语言网络编程技术。二、项目任务的主要内容和要求 实现类似操作系统自带ping程序的基本功能。 支持-t选项的功能,即如果用户不中止则可以不断的ping下去。 能显示IP报头的部分字段,如TTL等。三、项目设计(研究)思路PING的工作原理下,PING程序基于ICMP,使用ICMP的回送请求和回送应答来工作。对网络连通性的测试,探测主机到主机
2、之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。四、具体成果形式和要求可以实现一个简单的ping程序,并且能显示TTL、支持-t功能。进度安排起止日期工作内容8.25-8.26查阅资料了解ping程序8.26-8.27查阅资料并编写ping程序8.27-8.30完善程序并完成实验报告主要参考资料1. Visual C+网络通信编程实用案例精选(第二版)曹衍龙 编著2. Visual C+网络程序设计实例详解 张越 编著指导教师意见(签字): 年月日系(教研室)主任意见(签字): 年月日计算机网络课程设计说明书学院名称: 计算机与信息工程 班级名称: 学生姓名: 学 号:
3、 题 目:基于原始套间字实现简单的ping程序 指导教师姓 名: 起止日期: 一、选题背景(标题:四号仿宋加粗,顶格,行间距:24磅,上下间距:段前0.5行,段后0.5行)(内容:用小四号仿宋,首行空两格)通过设计Ping程序,理解Ping程序的实现原理,ping程序是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。ping使用的是ICMP协议,它发送ICMP回送请求消息给目的主机。ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机。如果源主机在一定时间内收到应答,则认为主机可达。ICMP协议通过IP协议发送的,IP协议是一种无连接的,不可
4、靠的数据包协议。因此,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制报文)协议。二、方案设计(或概要设计)Ping程序可分为四个模块,分别是:初始化 (图1-1)、功能控制 (图1-2、图1-3、图1-4、)、ping (图1-5)、main测试 (图1-6).1.初始化:初始化定义IP首部格式定义ICMP首部格式定义ICMP回应请求定义ICMP回应答复 2.功能控制:否 (将反馈的16位从高位移到低位)是(使用32位累加器,进行16位的反馈计算)Checksum()开始定义初始化一些变量Nleft1sum += *w+;nleft -= 2;Nleft=1
5、是(补全奇数位)sum += u;sum = (sum 16) + (sum & 0xffff);sum += (sum 16);answer = sum;返回answer结束图1-2是SendEchoRequest()开始定义初始化一些变量填充要发送的数据存储发送的时间计算回应请求的校验和发送回应请求返回nRet调用发送错误函数结束图1-3是RecvEchoReply ()开始定义初始化一些变量接收应答回复检验接收结果返回应答时间调用发送错误函数结束图1-43.ping:否是是开始定义初始化各个局部变量判断WSAGetLastError()是否调用成功否检测目标主机是否为NULL设置目标主机
6、的IP地址,开始ping发起四次ping测试发送ICMP回应请求等待回复的数据接收回复计算花费时间Loop是否为0 输出平均次数输出ping结果清除残余结束图1-54.main()函数:否开始WSAStartup() 是否成功截取后三位字符调用ping()释放资源加载失败结束为了实现-t图1-6三、详细设计要实现ping程序,需要实现以下步骤:1.初始化/定义IP首部格式typedef struct _IPHeader u_char VIHL; /版本和首部长度u_char ToS; /服务类型u_short TotalLen; /总长度u_short ID; /标识号u_short Frag
7、_Flags; /片偏移量u_char TTL; /生存时间u_char Protocol; /协议u_short Checksum; /首部校验和struct in_addr SrcIP; /源IP地址struct in_addr DestIP; /目的地址IPHDR, *PIPHDR;/定义ICMP首部格式typedef struct _ICMPHeaderu_char Type; /类型u_char Code; /代码u_short Checksum; /首部校验和u_short ID; /标识u_short Seq; /序列号char Data; /数据ICMPHDR, *PICMPH
8、DR; /定义ICMP回应请求typedef struct _ECHOREQUESTICMPHDR icmpHdr;DWORD dwTime;char cDataREQ_DATASIZE;ECHOREQUEST, *PECHOREQUEST;/定义ICMP回应答复typedef struct _ECHOREPLYIPHDR ipHdr;ECHOREQUEST echoRequest;char cFiller256;ECHOREPLY, *PECHOREPLY;2.功能/计算校验和函数u_short checksum(u_short *buffer, int len)/发送回应请求函数int S
9、endEchoRequest(SOCKET s, struct sockaddr_in *lpstToAddr)/接收应答回复并进行解析函数DWORD RecvEchoReply(SOCKET s, LPSOCKADDR_IN lpsaFrom, u_char *pTTL)3.ping程序/创建原始套接字,ICMP类型实现pingrawSocket = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);/第二个注释函数socketif (rawSocket = SOCKET_ERROR)printf(socket() error:%dn, WSAGetLastEr
10、ror();return;四、结果分析(或测试)1.输入ping主机的命令2.输入ping-t命令 3.输入外部网主机命令五、总结刚刚拿到课题时,我对于ping几乎没什么了解。在课程设计过程中遇到过很多一开始看似不可克服的难题。回顾这次课程设计,我感慨颇多。在这段时间内,需要经常从电脑上查询资料,但是这不仅可以帮助我巩固曾经学习过的知识,也让我增长了许多课本上学不到的的知识。在这个过程中,我独立思考的能力得到了很大地提高,更重要的是我也学到了更多学习的方法,让我受益匪浅。同时我也明白查阅资料的重要性,在信息多元化的今天,我们不可能掌握所有的知识,但是面对的复杂的情况又要求我们掌握一些自己专业知识之外的内容,这时候就需要掌握正确的相关信息,学会求助书籍或者网络等是必不可少的。查阅资料也使我们做的一切有理可依,而不是凭空想象。通过这次课程设计我发现了自身存在的许多不足之处,自己感觉理论上已经掌握的东西,却不真正了解它的内涵和工作原理,需要经过一番努力才能解决存在的困惑。这也很大地激发了我以后努力学习的兴趣。通过这次设计,我懂得了学习的重要性,学会了坚持、耐心和努力,为自己以后的学习和工作做最好的铺垫。参考文献1. Visual C+网络通信编程实用案例精选(第二版)曹衍龙 编著;2. Visual C+网络程序设计实例详解 张越 编著学生签名: 填表日期:年月日