欢迎来到天天文库
浏览记录
ID:9794916
大小:258.00 KB
页数:12页
时间:2018-05-10
《计算机网络基础课程设计--ping程序的实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、计算机网络工程课程设计报告题目:Ping程序的实现学生姓名:学号:专业班级:计科专业10102班同组姓名: 指导教师:设计时间:2013年下学期第16周指导老师意见:评定成绩:签名:日期:年月日11目录一、课程设计的目的和意义2二、课程设计的内容和要求21.内容:22.要求:2三、课程设计的相关技术2四、课程设计过程21.Ping主模块22.功能控制模块43.数据报解析模块5五、课程设计小结6六、参考文献7七、附录(程序清单)7八、心得体会1111一、课程设计的目的和意义利用ICMP数据包、C语言实现Ping命令程序,能实现基本的Ping操作,发送I
2、CMP回显请求报文,用于测试—个主机到只一个主机之间的连通情况。通过本程序的训练,使学生熟悉ICMP报文结构,使学生对ICMP有更深的理解,掌握Ping程序的设计方法,掌握网络编程的方法和技巧,从而编写出功能更强大的程序。二、课程设计的内容和要求1.内容:用C语言实现Ping命令程序,能实现基本的Ping操作,发送ICMP回显请求报文,用于测试—个主机到只一个主机之间的连通情况。2.要求:1)独立完成程序的设计、编码和调试。2)系统利用C语言实现,程序调试环境为TurboC或VC;3)按照课程设计规范书写课程设计报告。4)采用VC环境进行调试运行。三
3、、课程设计的相关技术由于Ping程序是面向用户的应用程序,该程序使用ICMP的封装机制,通过IP协议来工作。为了实现直接对IP和ICMP包进行操作,实验中使用RAW模式的socket编程。首先定义IP数据报首部,在IP数据报的基础上定义ICMP数据报首部,并初始化一些全局变量。接着自定义填充ICMP数据报字段函数FillICMPData()、校验和函数checksum()、解读ICMP报首部函数DecodeICMPHeader()、释放资源函Cleanup()。最后主函数通过调用这些函数来实现Ping命令功能。IP头与ICMP头的设置分别参照RFC7
4、91及RFC792的标准,包含所有必要信息。主程序设置main()函数,主函数用库函数实现套接字编程用于数据包发送及接收,其中,数据包发送调用sendto(),数据包接收调用recvfrom(),由于发送数据包时可能会遇到阻塞或者目标主机不通,造成超时,因此需要在发送数据包后调用一个函数判断是否超时,此处调用库函数setsockopt()来实现超时判断;其次,校验和函数采用移位方法进行计算。套接字所需要的文件有头文件Winsocket2.h、库文件WS2_32.LIB、动态库W32_32.DLL。创建套接字的时候参数的以及在创建套接字之前必须首先使用
5、WSAStartup函数。四、课程设计过程1.Ping主模块Ping()函数是本程序的核心部分,它基本是调用其他模块的函数来实现最终功能,其主要布骤包括:定义及初始化各个全局变量、打开socket动态库、设置接收和发送超时值、域名地址解析、分配内存、创建及初始化ICMP报文、发送ICMP请求报文、接收ICMP11应答报文以及解读应答报文和输出Ping结果,最后释放占用的资源其流程如下页图2.1所示。注释:(1)该模块并非只有处理还包括判断及输出判断结果的含义;(2)程序没运行一次就只能输出四行结果(前提是输入的地址有效),欲再次PING其他地址必须要
6、重新启动程序。(3)输入时不能输入目标主机名,不然ping结果为TIMEOUT;开始定义及初始化各个全局变量判断WSAStartup函数是否调用成功输出调用失败否创建套接字以及设置socket接收超时,发送超时选项;是输入PING的IP地址解析输入内容,设置PING参数创建及填充ICMP数据报文判断是否已发送四次Break;发送,接收以及解析数据包输出PIING结果是结束清除残余否112.功能控制模块功能控制模块主要是为其他模块提供可调用的函数,该模块主要包括参数获取功能、计算ICMP数据报文检验和、清除SOCKET,ICMP包数据以及接受缓冲区、占
7、用资源释放功能和显示用尸帮助功能。该模块一共包含三个函数来实现。,流程如图2.2所示。Checksum开始定义初始化cksum(size>1)确定cksum及size大小是if(size)计算校验cksum,获得结果cksum+=*(UCHAR*)buffer;否结束Cleanup开始if(m_hSocket!=INVALID_SOCKET)关闭套接字释放占用资源清除ICMP包数据以及接受缓冲区FWSACleanup();结束图2.2功能控制模块注释:a.illICMPData是由一系列的初始化的语句在流程图中不再画出;b.Cleanup()函数中的
8、WSACleanup(),HeapFree(),closesocket()都是一些库函数。checksum(
此文档下载收益归作者所有