计算机网络课程设计报告 设计名称 Ping 程序的设计与实现 专业班级 同组人姓名 指导教师 成 绩 一、设计目的和要求 1、实验目的 利用ICMP 数据包、C 语言实现Ping 命令程序,能实现基本的Ping 操作,发送ICMP回显请求报文,用于测试—个主机到只一个主机之间的连通情况。通过本程序的训练,使学生熟悉ICMP 报文结构,使学生对ICMP 有更深的理解,掌握Ping 程序的设计方法,掌握网络编程的方法和技巧,从而编写出功能更强大的程序。 2、实验要求:输出参考系统自带ping 程序,命令行运行:ping ip; 二、设计说明 1.设计思路 由于Ping 程序是面向用户的应用程序,该程序使用ICMP 的封装机制,通过IP 协议来工作。为了实现直接对IP 和 ICMP 包进行操作,实验中使用RAW 模式的socket 编程。首先定义IP 数据报首部,在IP 数据报的基础上定义ICMP 数据报首部,并初始化一些全局变量。接着自定义填充ICMP 数据报字段函数FillICMPData()、校验和函数checksum()、解读ICMP 报首部函数DecodeICMPHeader()、释放资源函Cleanup()。 最后主函数通过调用这些函数来实现Ping 命令功能。 2. 设计方案 IP 头与ICMP 头的设置分别参照RFC791 及 RFC792 的标准,包含所有必要信息。主程序设置main()函数,主函数用库函数实现套接字编程用于数据包发送及接收,其中,数据包发送调用sendto(),数据包接收调用recvfrom( ),由于发送数据包时可能会遇到阻塞或者目标主机不通,造成超时,因此需要在发送数据包后调用一个函数判断是否超时,此处调用库函数setsockopt()来实现超时判断;其次,校验和函数采用移位方法进行计算。 3. 系统运行环境:VC++ 6.0, Window XP 操作系统平台 4. 设计中的难点和重点 首先遇到的问题就是套接字文件的问题。套接字所需要的文件有头文件Winsocket2.h、库文件WS2_32.LIB、动态库W32_32.DLL。创建套接字的时候参数的以及在创建套接字之前必须首先使用WSAStartup 函数、在使用完套接字之后要释放内存资源,关闭套接字这些问题都是以前未接触过的。所以在写程序的时候需要查阅大量的资料,弄懂这些问题。其次,在套接字问题解决之后,遇到的难题,也是比较重要的问题就是如何实现ICMP 报文的发送和接受,以及怎样判断发送、接收超时或者找不到目的主机。最后在程序调试的时候总是出现这样或那样的错误,比如头文件错误、动态库无法导入、编辑器环境不匹配等。 5. 输入和输...