计算机网络课程设计报告 设计名称 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 命令功能
设计方案 IP 头与ICMP 头的设置分别参照RFC791 及 RFC792 的标准,包含所有必要信息
主程序设置main()函数,主函数用库函数实现套接字编程用于数据包发送及接收,其中,数据包发送调用sendto(),数据包接收调用recvfrom( ),由于发送数据包时可能会遇到阻塞或者目标主机不通,造成超时,因此需要在发送数据包后调用一个函数判断是否超时,此处调用库函数setsockopt()来实现超时判断;其次,校验和函数采用移位方法进行计算
系统运行环境:VC++ 6
0, Windo