PING程序的设计
1 ping设计任务目的及要求 5
1.1 设计目的 5
2 ping工作原理及设计方案 5
2.1 设计思路 5
2.3 设计流程图 6
2.4 设计方案 6
3 ping核心程序 7
4 ping实验结果 10
5 总结 11
一、 实验目的
PING程序是我们使用的比较多的用于测试网络连通性的程序。PING程序基于ICMP,使用ICMP的回送请求和回送应答来工作。由计算机网络课程知道,ICMP是基于IP的一个协议,ICMP包通过IP的封装之后传递。
课程设计中选取PING程序的设计,其目的是希望同学们通过PING程序的设计,能初步掌握TCP/IP网络协议的基本实现方法,对网络的实现机制有进一步的认识。
二、 实验内容和要求
1、RAW模式的SOCKET编程
PING程序是面向用户的应用程序,该程序使用ICMP的封装机制,通过IP协议来工作。为了实现直接对IP和ICMP包进行操作,实验中使用RAW模式的SOCKET编程。
熟悉SOCKET的编程,包括基本的系统调用如SOCKET、BIND等;
2、具体内容
1) 定义数据结构
需要定义好IP数据报、ICMP包等相关的数据结构;
2) 程序实现
在WINDOWS环境下实现PING程序;
3) 程序要求
在命令提示符下输入:
PING ΧΧΧ.ΧΧΧ.ΧΧΧ.ΧΧΧ
其中ΧΧΧ为目的主机的IP地址,不要求支持域名,对是否带有开关变量也不做要求。不带开关变量时,要求返回4次响应。
返回信息的格式:
REPLY FROM ΧΧΧ.ΧΧΧ.ΧΧΧ.ΧΧΧ
或
REQUEST TimeOut (无法PING通的情况)。
三、 实验主要仪器设备和材料
联网计算机。
四、 实验方法、步骤及结构测试
实验按下述步骤进行:
1) 熟悉IP以及ICMP协议的工作机制
2) 熟悉RAW模式的SOCKET编程
3) 编写PING的实现程序
4) 编译环境中需要包括SOCKET库 WS2_32.lib
5) 在模拟实现环境下调试并运行自己编写的PING程序
6) 保留你实现的程序在你的用户目录下,以备辅导教师检查
7) 最后提交源程序,撰写实验报告
五、 课程设计进程安排
序号 设计各阶段内容 地点 起止日期
1 选择课程设计题目,分析题目要求及熟悉实验软件。 实验2号楼202 2008.12.22
2 查阅资料,提出设计方案并讨论。 图书馆 2008.12.23
3 进行编译并调试程序 实验2号楼202 2008.12.24
4 调试程序、改进 实验2号楼202 2008.12.25
5 检查 实验2号楼202 2008.12.26
辣、 应收集的资料及主要参考文献
1. 程良伦主编,《网络工程概论》,机械工业出版社. 2007
2. 苏峰,黄金双,汤蕾编著,《Visual C++.NET编程实例》,清华大学出版社.2004
3. 黄嘉辉编著,《Internet与TCP/IP程序设计之C++ Builder高手》,清华大学出版社.2001
发出任务书日期: 2008年 12月 22日 指导教师签名:
计划完成日期: 2008年 12月 29日 基层教学单位责任人
签章:
主管院长签章:
1 ping设计任务目的及要求
1.1 设计目的
PING程序是我们使用的比较多的用于测试网络连通性的程序。PING程序基于ICMP,使用ICMP的回送请求和回送应答来工作。由计算机网络课程知道,ICMP是基于IP的一个协议,ICMP包通过IP的封装之后传递。
课程设计中选取PING程序的设计,其目的是希望同学们通过PING程序的设计,能初步掌握TCP/IP网络协议的基本实现方法,对网络的实现机制有进一步的认识。
1.2 设计要求
1、RAW模式的SOCKET编程
PING程序是面向用户的应用程序,该程序使用ICMP的封装机制,通过IP协议来工作。为了实现直接对IP和ICMP包进行操作,实验中使用RAW模式的SOCKET编程。
熟悉SOCKET的编程,包括基本的系统调用如SOCKET、BIND等;
2、具体内容
1)定义数据结构
需要定义好IP数据报、ICMP包等相关的数据结构;
2)程序实现
在WINDOWS环境下实现PING程序;
3)程序要求
在命令提示符下输入:
PING ΧΧΧ.ΧΧΧ.ΧΧΧ.ΧΧΧ
其中ΧΧΧ为目的主机的IP地址,不要求支持域名,对是否带有开关变量也不做要求。不带开关变量时,要求返回4次响应。
返回信息的格式:
REPLY FROM ΧΧΧ.ΧΧΧ.ΧΧΧ.ΧΧΧ
或
REQUEST TimeOut (无法PING通的情况)。
2 ping工作原理及设计方案
2.1 设计思路
由于PING是基于ICMP协议,因此需要使用windows socket中的RAW模式进行编程。首先要定义好IP数据包头,接着再IP数据包头的基础上定义ICPM数据包头,由于需要计算回送时间,因此还需要ICMP回送数据的结构。PING的具体实现流程可以分为以下几点:首先创建SOCKET,然后根据主机名查询主机地址,输出主机地址;接着调用PING主程序对目标主机地址进行测试,测试过程包含相关信息的处理;最后输出信息,并关闭SOCKET。
2.3 设计流程图
2.4 设计方案
IP头与ICMP头的设置分别参照RFC791及RFC792的标准,包含所有必要信息。ICMP回送数据结构增加了数据传输时间用于计算。主程序设置PING()函数,用于数据包发送及接收,其中,数据包发送(回送请求)调用另一函数SendEchoRequest(),数据包接收(回送接收)调用RecvEchoReply()。由于发送数据包时可能会遇到阻塞或者目标主机不通,造成超时,因此需要在发送数据包后调用一个函数来判断是否超时,此处设置一个函数,WaitForEchoReply()来实现超时判断功能,该函数调用SOCKET的select()来进行判断。其次,还需要一个函数来计算CRC校验和,此处设置为in_cksum(),校验和采用移位的方法进行计算。另外设置一ReportError()函数来返回SOCKET操作相关的错误代码。
PING程序作为SOCKET的RAW方式下调用ICMP协议,数据包采用UDP发送,相应调用SOCKET的sendto()和recvfrom()进行发送及接收。334