您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > Ping课程设计报告
课程设计课程名称_计算机网络题目名称_PING程序设计2012年12月25日摘要为了深入理解并全面掌握ping命令的使用,以下结合ping程序的原理对其功能进行了深入探讨.由此可见Internet中的某台主机能ping通并不能肯定该主机就能被访问,而ping不通也并不意味着就不能被访问,同时也发现ping命令对网络也存在一些安全隐患.在Window系统下使用Win32进行网络编程实现采用WSA通过IP/ICMP进行实现Ping目的主机的功能。使用VisualStudio2008控制台进行建立的工程,使用WindowSocketAPI2版本。自己定义IP、ICMP结构体,建立目的地址和原始套接字,调用Win32库函1数进行发送、接收数据包。采用ICMP的时间截请求和回答差错报文。本设计包括了具体设计任务,基本思路及所涉及的相关理论,设计流程图,以及考虑到运行中会出现的一些异常处理。关键词:Window网络编程,Socket,TCP/IP,ICMP报文目录一、实验目的................................................................1二、实验内容和要求..........................................................21、RAW模式的SOCKET编程.................................................32、具体内容..............................................................3三、实验主要仪器设备和材料..................................................3四、实验方法及原理..........................................................31.ICMP报文组成结构:...................................................32.RAW模式的SOCKET编程实现Ping的具体原理..............................42.1创建原始套接字..................................................422.2设置套接字选项...................................................52.3创建并填充相应协议头.............................................5五、实验流程图..............................................................6六、实验具体步骤............................................................61.定义IP结构体.........................................................72.定义ICMP结构体.......................................................73.定义目的地址..........................................................74.定义原始套接字........................................................75.发送数据包............................................................76.接收数据包............................................................77.解析数据包............................................................88.校验和的实现..........................................................89.打印相关信息..........................................................810.循环工作实现块.......................................................811.信息统计.............................................................812.相关异常处理.........................................................913.相关引用到的头文件及宏..............................................11七、实验测试结果以及使用说明..............................................111八、参考文献..............................................................123九、附录:源代码..........................................................134一、实验目的PING程序是我们使用的比较多的用于测试网络连通性的程序。PING程序基于ICMP,使用ICMP的回送请求和回送应答来工作。由计算机网络课程知道,ICMP是基于IP的一个协议,ICMP包通过IP的封装之后传递。课程设计中选取PING程序的设计,其目的是希望同学们通过PING程序的设计,能初步掌握TCP/IP网络协议的基本实现方法,对网络的实现机制有进一步的认识。二、实验内容和要求31、RAW模式的SOCKET编程PING程序是面向用户的应用程序,该程序使用ICMP的封装机制,通过IP协议来工作。为了实现直接对IP和ICMP包进行操作,实验中使用RAW模式的SOCKET编程。熟悉SOCKET的编程,包括基本的系统调用如SOCKET、BIND等;2、具体内容1)定义数据结构需要定义好IP数据报、ICMP包等相关的数据结构;2)程序实现在WINDOWS环境下实现PING程序;3)程序要求在命令提示符下输入:PINGΧΧΧ.ΧΧΧ.ΧΧΧ.ΧΧΧ其中ΧΧΧ为目的主机的IP地址,不要求支持域名,对是否带有开关变量也不做要求。不带开关变量时,要求返回4次响应。返回信息的格式:REPLYFROMΧΧΧ.ΧΧΧ.ΧΧΧ.ΧΧΧ或REQUESTTimeOut(无法PING通的情况)。三、实验主要仪器设备和材料联网Win7操作系统计算机、VisualStudio2008Win32控制台程序四、实验方法及原理ping的原理:Ping命令的主要作用是检测网络上主机的状态。要是在几年前,我们还可以下如此断言,如果不能Ping通某台主机,那么也就无法Telnet或者FTP到这台主机,但随着互联网的安全意识的增加,出现了访问控制清单的路由器和防火墙,由于ICMP报文是在IP数据包中被传输的,而到达一台主机不仅取决于IP层是否到达,还取决于使用何种协议和端口。譬如金山公司的金山网镖就可以禁止其他机器Ping通这台主机。所以在现在的情况下,即时Ping不通某台机器,但也有可能FTP登陆到这台机器,或者通过HTTP来浏览这台机器上的Web页面1.ICMP报文组成结构:在网络中,一般用ICMP来传递差错报文以及其他应注意的信息.ICMP一般被认为是和IP协议同一层的协议,IMCP报文通常被IP层或者更高层的协议(如:TCP或者UDP)使用,ICMP对于互联网以及其他基于IP协议的网络的正常运行起着非常重要的作用.有许多重要的网络程序都是基于ICMP协议上的,最为著名如Ping和Tracert等.42.RAW模式的SOCKET编程实现Ping的具体原理其中PING程序设计使用了RAW模式的SOCKET编程,程序使用ICMP的封装机制,通过IP协议来工作。2.1创建原始套接字要使用原始套接字,必须经过创建原始套接字、设置套接字选项和创建并填充相应协议头这三个步骤,然后用send、WSASend函数将组装好的数据发送出去。接收的过程也很相似,只是需要用recv或WSARecv函数接收数据。我们可以用socket或WSASocket函数来创建原始套接字,因为原始套接字能直接控制底层协议,因此只有属于“管理员”组的成员,才有权创建原始套接字。下面是用socket函数创建原始套接字的代码。SOCKETsock;Sock=socket(AF_INET,SOCK_RAW,IPPROTO_UDP);上述创建原始套接字的代码使用的是UDP协议,如果要使用其它的协议,比如ICMP、IGMP、IP等协议,只需要把相应的参数改为IPPROTO_ICM、IPPROTO_IGMP、IPPROTO_IP就可以了。另外,IPPROTO_UDP、IPPROTO_IP、IPPROTO_RAW这几个协议标志要求使用套接字选项IP_HDRINCL,而目前只有Windows2000和WindowsXP提供了对IP_HDRINCL的支持,这意味着在Windows2000以下平台创建原始套接字时是不能使用IP、UDP、TCP协议的。2.2设置套接字选项创建了原始套接字后,就要设置套接字选项,这要通过setsocketopt函数来实现,setsocketopt函数的声明如下:intsetsocketopt(SOCKETs,intlevel,intoptname,constcharFAR*optval,intoptlen);5在该声明中,参数s是标识套接口的描述字,要注意的是选项对这个套接字必须是有效的。参数Level表明选项定义的层次,对TCP/IP协议族而言,支持SOL_SOCKET、IPPROTO_IP和IPPROTO_CP层次。参数Optname是需要设置的选项名,这些选项名是在Winsock头文件内定义的常数值。参数optval是一个指针,它指向存放选项值的缓冲区。参数optlen指示optval缓冲区的长度2.3创建并填充相应协议头这一步就是创建IP和TCP协议头的数据结构,根据相关协议的定义进行编写即可,下面是一个TCP协议头的数据结构。发送接收数据包的实现原理:Sendto()-使用指定的SocketFlags,将指定字节数的数据发送到指定的终结点。适用于已连接的数据报或流式套接口发送数据。对于数据报类套接口,必需注意发送数据长度不应超过通讯子网的IP包最大长度。IP包最大长度在WSAStartup()调用返回的WSAData的iMaxUdpDg元素中。如果数据太长无法自动通过下层协议,则返回WSAEMSGSIZE错误,数据不会被发送。请注意成功地完成sendto()调用并不意味着数据传送到达。endto()函数主要用于SOCK_DGRAM类型套接口向to参数指定端的套接口发送数据报。对于SOCK_STREAM类型套接口,to和tolen参数被忽略;这种情况下sendto()等价于send()。为了发送广播数据(仅适用于SOCK_DGRAM),in参数所含地址应该把特定的IP地址INADDR_BROADCAST(winsock.h中有定义)和终端地址结合起来构造。通常建议一个广播数据报的大小不要大到以致产生碎片,也就是说数据报的数据部分(包括头)不超过512字节。如果传送系统的缓冲区空间不够保存需传送的数据,除非套接口处于非阻塞I/O方式,否则sendto()将阻塞。对于非阻塞SOCK_STREAM类型的套接口,实际写的数据数目可能在1到所需大小之间,
本文标题:Ping课程设计报告
链接地址:https://www.777doc.com/doc-4238305 .html