两台主机ping不通(一台能行,一台不行)

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
网络编程-PING程序设计实验指导书 一.实验目的 (1)熟悉原始套接字编程。 (2)了解网络的结构。 (3)了解网络传输底层协议。 二.实验要求 PING程序是用于测试网络连通性的程序。要求在WINDOWS环境下实现基本的PING程序 功能. 在命令提示符下输入: PING ***.***.***.*** 其中***为目的主机的IP地址,不要求支持域名,对是否带有开关变量也不做要求。 不带开关变量时,要求返回4次响应。 返回信息的格式: REPLY FROM ***.***.***.*** 或 REQUEST TimeOut (无法PING通的情况) 三.实验原理 1、PING的工作原理 ping 程序是用来探测主机主机之间是否可通信,如果不能ping到某台主机,表明不能和这 台主机建立连接。ping 使用的是ICMP协议,它发送ICMP回送请求消息给目的主机。ICMP协议规定:目的主机必 须返回ICMP回送应答消息给源主机。如果源主机在一定时间内收到应答,则认为主机可 达。 ICMP协议通过IP协议发送的,IP协议是一种无连接的,不可靠的数据包协议。因此, 保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制 报文)协议。 当传送IP数据包发生错误--比如主机不可达,路由不可达等等,ICMP协议将会把错 误信息封包,然后传送回给主机。给主机一个处理错误的机会,这也就是为什么说建立 在IP层以上的协议是可能做到安全的原因。ICMP数据包由8bit的错误类型和8bit的代码 和16bit的校验和组成。而前 16bit就组成了ICMP所要传递的信息。 PING利用ICMP协议包来侦测另一个主机是否可达。原理是用类型码为0的ICMP发请求 ,受到请求的主机则用类型码为8的ICMP回应。ping程序来计算间隔时间,并计算有多少 个包被送达。用户就可以判断网络大致的情况。 IP数据报 TCP/IP协议定义了一个在因特网上传输的包, 称为IP数据报(IP datagram). 这是一个与硬件无关的虚拟包, 由包头和数据两部分组成, 包头中的源地址和目的地址都是IP协议地址. ICMP TCP/IP组件包括一个ICMP(Internet Control Message Protocol)协议, 该协议定义了的报文类型: Echo,Echo Reply,用于ping程序的基本实现 下图是ICMP报文的传送: 2、RAW模式的SOCKET编程 PING程序是面向用户的应用程序,该程序使用ICMP的封装机制,通过IP协议来工作。为 了实现直接对IP和ICMP包进行操作,实验中使用RAW模式的SOCKET编程。 熟悉SOCKET的编程,包括基本的系统调用如SOCKET、BIND等. 3、具体内容 (1) 定义数据结构 需要定义好IP数据报、ICMP包等相关的数据结构 (2) 程序实现 在WINDOWS环境下实现PING程序 四. 实验步骤和注意事项 1、 熟悉IP以及ICMP协议的工作机制 2、 熟悉RAW模式的SOCKET编程 3、编写PING的实现程序 4、编译环境中需要包括SOCKET库 WS2_32.lib 5、 在模拟实现环境下调试并运行自己编写的PING程序 6、最后提交源程序,撰写实验报告 初步流程图 具体步骤 1、定义IP头和ICMP头 该程序定义自己的IP头和ICMP头数据结构,代码如下: //IP首部数据结构 typedef struct iphdr { unsigned int h_len : 4 ; //首部长度 unsigned int version : 4 ; //版本 unsigned char tos ; //服务类型 unsigned short total_len ; //报文总长度 unsigned short ident ; //标识 unsigned short frag_and_flags ; //偏移量 unsigned char ttl ; //寿命 unsigned char proto ; //协议 unsigned short checksum ;// 首部校验和 unsigned int sourceIP ;// 源站IP unsigned int destIP ;// 目的站IP }; //ICMP首部数据结构 typedef struct icmphdr { BYTE i_type ; //类型 BYTE i_code ; //代码 USHORT i_cksum ; //首部校验和 USHORT i_id ; //标识 USHORT i_seq ; //序列号 ULONG timestamp ; //时间戳 }; 2.定义变量 WSADATA wsaDa

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值