《ping课程设计报告》由会员分享,可在线阅读,更多相关《ping课程设计报告(15页珍藏版)》请在金锄头文库上搜索。
1、课 程 设 计课程名称_计算机网络 题目名称_PING 程序设计 2012 年 12 月 25 日摘要为了深入理解并全面掌握 ping 命令的使用,以下结合 ping 程序的原理对其功能进行了深入探讨.由此可见 Internet 中的某台主机能 ping 通并不能肯定该主机就能被访问,而 ping不通也并不意味着就不能被访问,同时也发现 ping 命令对网络也存在一些安全隐患.在Window 系统下使用 Win32 进行网络编程实现采用 WSA 通过 IP/ICMP 进行实现 Ping 目的主机的功能。使用 VisualStudio2008 控制台进行建立的工程,使用 Window Socke
2、t API 2版本。自己定义 IP、ICMP 结构体,建立目的地址和原始套接字,调用 Win321库函数进行发送、接收数据包。采用 ICMP 的时间截请求和回答差错报文。本设计包括了具体设计任务,基本思路及所涉及的相关理论,设计流程图,以及考虑到运行中会出现的一些异常处理。关键词:Window 网络编程, Socket,TCP/IP,ICMP 报文目录 一、 实验目的 .5二、 实验内容和要求 .51、RAW 模式的 SOCKET 编程 .32、具体内容 .3三、 实验主要仪器设备和材料 .3四、 实验方法及原理 .31. ICMP 报文组成结构: .62. RAW 模式的 SOCKET 编程
3、实现 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七、 实验测试结果以及使用说明 .11八、 参考文献 .13九、 附录:源代码 .14
4、一、 实验目的PING 程序是我们使用的比较多的用于测试网络连通性的程序。PING 程序基于 ICMP,使用 ICMP 的回送请求和回送应答来工作。由计算机网络课程知道,ICMP 是基于 IP 的一个协议,ICMP 包通过 IP 的封装之后传递。课程设计中选取 PING 程序的设计,其目的是希望同学们通过 PING 程序的设计,能初步掌握 TCP/IP 网络协议的基本实现方法,对网络的实现机制有进一步的认识。二、 实验内容和要求31、RAW 模式的 SOCKET 编程PING 程序是面向用户的应用程序,该程序使用 ICMP 的封装机制,通过 IP协议来工作。为了实现直接对 IP 和 ICMP
5、包进行操作,实验中使用 RAW 模式的 SOCKET 编程。熟悉 SOCKET 的编程,包括基本的系统调用如 SOCKET、BIND 等;2、具体内容1) 定义数据结构需要定义好 IP 数据报、ICMP 包等相关的数据结构;2) 程序实现在 WINDOWS 环境下实现 PING 程序;3) 程序要求在命令提示符下输入:PING .其中 为目的主机的 IP 地址,不要求支持域名,对是否带有开关变量也不做要求。不带开关变量时,要求返回 4 次响应。返回信息的格式:REPLY FROM .或REQUEST TimeOut (无法 PING 通的情况) 。三、 实验主要仪器设备和材料联网 Win7 操
6、作系统计算机、VisualStudio2008 Win32 控制台程序四、 实验方法及原理ping 的原理: Ping 命令的主要作用是检测网络上主机的状态。要是在几年前,我们还可以下如此断言,如果不能 Ping 通某台主机,那么也就无法 Telnet 或者 FTP 到这台主机,但随着互联网的安全意识的增加,出现了访问控制清单的路由器和防火墙,由于ICMP 报文是在 IP 数据包中被传输的,而到达一台主机不仅取决于 IP 层是否到达,还取决于使用何种协议和端口。譬如金山公司的金山网镖就可以禁止其他机器 Ping 通这台主机。所以在现在的情况下,即时 Ping 不通某台机器,但也有可能 FTP
7、登陆到这台机器,或者通过 HTTP 来浏览这台机器上的 Web 页面 1.ICMP 报文组成结构:在网络中,一般用 ICMP 来传递差错报文以及其他应注意的信息.ICMP 一般被认为是和IP 协议同一层的协议,IMCP 报文通常被 IP 层或者更高层的协议 (如:TCP 或者 UDP)使用,ICMP 对于互联网以及其他基于 IP 协议的网络的正常运行起着非常重要的作用.有许多重要的网络程序都是基于 ICMP 协议上的,最为著名如 Ping 和 Tracert 等.42.RAW 模式的 SOCKET 编程实现 Ping 的具体原理其中 PING 程序设计使用了 RAW 模式的 SOCKET 编程
8、,程序使用 ICMP的封装机制,通过 IP 协议来工作。2.1 创建原始套接字要使用原始套接字,必须经过创建原始套接字、设置套接字选项和创建并填充相应协议头这三个步骤,然后用 send、WSASend 函数将组装好的数据发送出去。接收的过程也很相似,只是需要用 recv 或 WSARecv 函数接收数据。我们可以用 socket 或 WSASocket 函数来创建原始套接字,因为原始套接字能直接控制底层协议,因此只有属于“管理员”组的成员,才有权创建原始套接字。下面是用 socket 函数创建原始套接字的代码。SOCKET sock;Socksocket (AF_INET, SOCK_RAW,
9、 IPPROTO_UDP);上述创建原始套接字的代码使用的是 UDP 协议,如果要使用其它的协议,比如 ICMP、IGMP、IP 等协议,只需要把相应的参数改为IPPROTO_ICM、IPPROTO_ IGMP、 IPPROTO_IP 就可以了。另外,IPPROTO_UDP、IPPROTO_IP、IPPROTO_RAW 这几个协议标志要求使用套接字选项IP_HDRINCL,而目前只有 Windows 2000 和 Windows XP 提供了对 IP_HDRINCL 的支持,这意味着在 Windows 2000 以下平台创建原始套接字时是不能使用IP、UDP、TCP 协议的。2.2 设置套接字
10、选项创建了原始套接字后,就要设置套接字选项,这要通过 setsocketopt 函数来实现,setsocketopt 函数的声明如下:int setsocketopt (SOCKET s,int level,int optname,const char FAR *optval,5int optlen );在该声明中,参数 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()调用