当黑客在用 Ping时,Ping 在偷摸做啥事儿?

2022-11-14 10:44:30 浏览数 (1)

一般来说,用 ping 查看网络情况,主要是检查两个指标:

  • 第一个是看看是不是超时
  • 第二个看看是不是延迟太高

如果超时那么肯定是网络有问题(禁 ping 情况除外),如果延迟太高,网络情况肯定也是很糟糕的。

  • ping 是如何检查网络的?
  • ping 背后的原理到底是啥样的?

这篇文章就带着你,来跟着 ping 命令走一圈,看看 ping 是如何工作的

环境准备和抓包

环境准备

抓包工具:Wireshark 准备两台电脑,进行互 ping 操作:

  • A 电脑(IP 地址:192.168.2.135 / MAC 地址:98:22:EF:E8:A8:87)
  • B 电脑(IP 地址:192.168.2.179 / MAC 地址:90:A4:DE:C2:DF:FE)
抓包操作

打开 Wireshark,选取指定的网卡进行抓包,进行 ping 操作,在 A 电脑上 ping B 电脑的 IP。

抓包情况如下:

这里先简单的介绍下 Wireshark 的控制面板,这个面板包含 7 个字段,分别是:

  • NO: 编号
  • Time: 包的时间戳
  • Source: 源地址
  • Destination: 目标地址
  • Protocol: 协议
  • Length: 包长度
  • Info: 数据包附加信息

深入解析

上图中抓包编号 54-132 显示的就是整个 ping 命令的过程,我们知道 ping 命令不是依托于 TCP 或者 UDP 这种传输层协议的,而是依托于 ICMP 协议实现的, 那么什么是 ICMP 协议呢?这里简单介绍下:

ICMP 协议的产生背景

[RFC792] 中说明了 ICMP 产生的原因:

由于互联网之间通讯会涉及很多网关和主机,为了能够报告数据错误,所以产生了 ICMP 协议。也就是说 ICMP 协议就是为了更高效的转发 IP 数据报和提高交付成功的机会。

ICMP 协议的数据格式

根据上图,你会知道 ICMP 协议头包含 4 个字节,头部主要用来说明类型和校验 ICMP 报文。

下图是对应的类型和代码释义列表,后面分析抓包的时候会用到。

简单介绍完了 ICMP,那么抓包过程中出现的 ARP 协议是什么呢?同样来简单解释下:

ARP 协议

我们知道,在一个局域网中,计算机通信实际上是依赖于 MAC 地址进行通信的,那么 ARP( AddressResolutionProtocol)的作用就是根据 IP 地址查找出对应的 MAC 地址。

Ping 过程解析

了解了上面的基础概念后,我们来分析下抓包的数据,其流程如下:

  • A 电脑( 192.168.2.135)发起 ping 请求, ping192.168.2.179
  • A 电脑广播发起 ARP 请求,查询 192.168.2.179 的 MAC 地址
  • B 电脑应答 ARP 请求,向 A 电脑发起单向应答,告诉 A 电脑自己的 MAC 地址为 90:A4:DE:C2:DF:FE
  • 知道了 MAC 地址后,开始进行真正的 ping 请求,由于 B 电脑可以根据 A 电脑发送的请求知道 源 MAC 地址,所以就可以根据源 MAC 地址进行响应了

上面的请求过程我画成流程图比较直观一点:

观察仔细的朋友,可能已经发现,Ping 4 次请求和响应结束后,还有一次 B 电脑对 A 电脑的 ARP 请求,这是为什么?

这里我猜测应该是有 2 个原因:

  • 由于 ARP 有缓存机制,为了防止 ARP 过期,结束后重新更新下 ARP 缓存,保证下次请求能去往正确的路径,如果 ARP 过期就会导致出现一次错误,从而影响测试准确性。
  • 由于 ping 命令的响应时间是根据请求包和响应包的时间戳计算出来的,所以一次 ARP 过程也是会消耗时间。这里提前缓存最新的 ARP 结果就是节省了下次 ping 的 ARP 时间。

为了验证猜测,我再进行一次 ping 操作,抓包看看是不是和猜测的一样。此时,计算机里面已经有了 ARP 的缓存,执行 ARP-a 看看缓存的 arp 列表:

看看第二次 ping 的抓包:

可以看到,上图中在真正 ping 之前并没有进行一次 ARP 请求。

这也就是说,直接拿了缓存中的 ARP 来执行了,另外当 B 计算机进行响应之前还是进行了一次 ARP 请求,它还是要确认下之前的 ARP 缓存是否为正确的。

结束 ping 操作之后,同样再发一次 ARP 请求,更新下自己的 ARP 缓存,这里和我们的猜想基本一致。

弄懂了 ping 的流程之后我们来解析下之前解释的 ICMP 数据结果是否和抓包的一致。

我们来点击一个 ping request 看看 ICMP 协议详情:

图中红框内就行 ICMP 协议的详情了,这里的 Type=8,code=0, 校验是正确,且这是一个请求报文。

我们再点击 Responseframe:57,这里说明响应报文在序号 57。详情如下:

上图的响应报文, Type=0,code=0,这里知道就是响应报文了,然后最后就是根据请求和响应的时间戳计算出来的响应延迟。3379.764ms-3376.890ms=2.874ms。

总结

你看,上面的文章其实是分析了一次完整的 ping 请求过程。

ping 命令是依托于 ICMP 协议的, ICMP 协议的存在就是为了更高效的转发 IP 数据报和提高交付成功的机会。

ping 命令除了依托于 ICMP,在局域网下还要借助于 ARP 协议, ARP 协议能根据 IP 地址反查出计算机的 MAC 地址。

另外 ARP 是有缓存的,为了保证 ARP 的准确性,计算机会更新 ARP 缓存。

学了这个,以后面试再问 ping 的详细过程,应该就比较稳了吧

0 人点赞