Project 3 Ping 程序说明文档
I. 问题描述
实现 PING 程序功能,当运行时,使其产生 4 个 ICMP 报文,发送这些报文到
目标主机并对应答计时,通过这种方法来测试目的主机的可达性。显示输出
如下:
当目的主机可达时:
reply from 200.200.200.1(200.200.200.1): time=3.000ms
reply from 200.200.200.1(200.200.200.1): time=5.000ms
reply from 200.200.200.1(200.200.200.1): time=7.000ms
reply from 200.200.200.1(200.200.200.1): time=2.000ms
当目的主机不可达时:
Request Timed Out.
Request Timed Out.
Request Timed Out.
Request Timed Out.
II. 编程环境
Linux
III. 主要输出文件
Ping.c ping
主要功能函数说明:
unsigned short cal_chksum(unsigned short *addr,int len)
功能:计算 ICMP 报文的校验和.将报文以 2 字节为单位相加再求反
int send_packet(int pkt_no,char*sendpacket)
功能:发送 ICMP 请求报文.ICMP 报文打包 pack() 记录发送时间
发送报文 sendto()
int pack(int pkt_no,char*sendpacket)
功能:给 ICMP 请求报文打包.设置 ICMP 头部各字节(包括计算校验和)
int recv_packet(int pkt_no,char*recvpacket)
功能:接收并检验 ICMP 应答报文.接收报文 recvfrom() 记录接收时间
解包并检验 unpack()
int unpack(int cur_seq,char *buf,int len)
功能:解 ICMP 包并检验是否是当前等待的 ICMP 应答.判断包长度 判断
ICMP 类型是否是 ICMP_ECHOREPLY 判断 id 号和序列号 seq 是否正确
IV. 实现技巧
程序执行时,向目标主机发送 ICMP“回应请求”(类型为 ICMP_ECHO 的)
报文。如果目标主机接到了该报文,会向发出该报文的主机发送 ICMP“回应请
求应答”(类型为 ICMP_ECHOREPLY 的)报文,那么本地主机就会收到该目的
主机的 ICMP“回应请求应答”报文,并知道该主机“可达”;反之,如果该目
评论0