wireshark PING流量分析

ICMP

相信大家都会用ping命令测试联通性

这里给大家带来ping命令抓取的数据包来了解一下详细的格式

在了解这个数据包之前先来了解一下ICMP的报文格式

在这之前来了解一下进制

一个二进制为一位

八个二进制位一个字节

四个二进制为一个十六进制数

一个字节为两个十六进制数

下面这张表表示了ICMP的通用报文格式

中文版

我们再来看看wireshark是怎么描述的

可以看到,这里有了所开头所对应的type、code等

那么type后面的内容代表了什么意思呢?

其实它的意思为:用于ping操作,以检查特定连接是否可达。

为什么是这个?因为工程师在设计时用类型(type)字段值为0和8的,用于ping操作,以检查特定连接是否可达。

前面为什么会提进制的的知识呢?看下面这张图

这回理解了吧?

这时就会有细心的朋友门发现,不对啊,下面有东西对不上啊!

我只能说当然对不上,因为wireshark内的报文格式根本不是我上面那一张ICMP通用报文格式

下面这张才是

这个是:ICMP Echo Request/Reply消息格式

因为数据包是用ping命令抓取的,而它使用时用的就是这个格式

接下来我们来聊一下这些内容代表的含义

  • 类型(Type):占1字节,标识ICMP报文的类型。目前定义了多种类型,取值范围在1到255之间。根据类型值,ICMP报文可以分为差错报文(1~127)和信息报文(128以上)。
  • 代码(Code):占1字节,标识对应ICMP报文的代码。它与类型字段一起共同标识了ICMP报文的详细类型。
  • 校验和(Checksum):占2字节,是对包括ICMP报文数据部分在内的整个ICMP数据报的校验和,以检验报文在传输过程中是否出现了差错。其计算方法与IP报头中的校验和计算方法相同。
  • 标识符(Identifier):占2字节,用于对每一个发送的数据报进行标识。
  • 序列号(Sequencenumber):占2字节,用于对发送的每一个数据报文进行编号

这就是他们的含义

那么知道了这些,你会不会好奇Data字段呢?

其实啊,数据(Data)部分其实和类型(type)代码(code)字段密切相关

数据(Data)部分:数据部分的格式和内容取决于ICMP报文的类型(Type)。对于某些类型的ICMP报文,数据部分可能包含额外的信息,如IP头部和IP头部后面的8个字节(对于差错报文)或时间戳信息(对于时间戳请求与应答报文)等。

这里就是要结合上面的Type:8了,还记得上面说的吗?

这里来介绍详细的一些数字的含义:

  1. 差错报文:用于报告在IP数据报传输过程中发生的错误。常见的差错报文类型包括:

    • 目的不可达:类型字段值为3,代码字段值为0~15,用于细分目的不可达的具体原因。例如,网络不可达、主机不可达、协议不可达等。
    • 时间超时:类型字段值为11,代码字段值为0(TTL超时)或1(分片重组超时)。
    • 参数问题:类型字段值为12,表示IP头部中的字段值出现了问题。
  2. 信息报文:用于提供有关网络通信的信息。常见的信息报文类型包括:

    • 回显请求与应答:类型字段值分别为0和8,用于ping操作,以检查特定连接是否可达。
    • 时间戳请求与应答:类型字段值分别为13和14,用于时间同步操作。
    • 地址掩码请求与应答:类型字段值分别为17和18,用于请求和应答子网掩码信息。

那么到这里介绍就完毕了,其实ICMP的报文格式有很多种,如果有想深入了解的可以自己去查一下资料。

做一道题

接下来我给大家介绍一个CTF的数据包分析题目

这个题目给我干成人机了

因为他的flag藏在了ping包的长度中,这谁能想的到啊

来看数据包

第一件事肯定是看协议分级统计,主要是分析数据包的主要方向所提供的依据

感觉没什么特别的

第二步,看会话,查看发生于一特定端点的 IP 间的所有流量.

第三步,看端点,列出了 Wireshark 发现的所有 endpoints 上的统计信息

以上是一般正常查看数据包的流程

当然这主要是对数据包一个大体的查看

我们主要还是分析ICMP的协议包

依次查看每个数据包,发现除了一些没用的数据和正常的包头没什么特别的

上面说了,答案就在包长度上面,我们来看看

发现没有?非常有规律的数据包

可是它和flag有毛关系啊!其实要转码的

这个时候我们打开kali

写个py脚本

写个py脚本
a=[144,150,139,145,165,91,109,151,122,113,106,119,93,167]
for i in a:
    len=chr(i-42)
    print(len,end='')

在来一道

嘿嘿,眼熟不?就是最开始的数据包,这里面也藏着flag

这个flag藏在ICMP的data中

这个出去包头外,data中除了f就是点号了

再看第二个

这个data中是个l,在依次往下查看,就可以发现是个flag值了

我们用工具把它提取出来

先以纯文本的方式保存

查看一下

然后用这个命令

grep -E '[a-zA-Z0-9{}][.]{15}' ping.txt | awk '{print $NF}' | cut -c 1 | tr -d '\n'

成功

### 使用Wireshark进行Ping失败的网络故障排查 当遇到ping操作失败的情况时,可以利用Wireshark来捕获并分析ICMP报文,从而定位问题所在。具体来说: 在网络通信过程中,如果目标主机不可达,则会在返回给源主机的信息中携带特定类型的错误消息[^1]。这些信息可以通过Wireshark捕捉到,并进一步解析。 对于未配置网关的情形,通常表现为无法到达远程网络上的节点,此时Wireshark会显示出尝试发送至默认网关却未能成功转发的消息流[^2]。这种情况下,应当检查本地计算机上设置的路由表以及默认网关的状态。 另外一种情况是存在大量的TCP重传现象,这可能意味着路径中的某个环节出现了丢状况。通过对镜像流量的研究可以帮助识别具体的丢位置[^3]。值得注意的是,即使最终接收方确实收到了完整的文件或数据,但在传输过程中的某些阶段仍然可能发生临时性的丢失事件,而这些问题同样可以在Wireshark的日志里找到线索。 最后需要注意的一点是在实际观察到的数据帧内不会看到FCS字段,因为该字段已被移除以便于展示更清晰的内容结构[^4]。 #### ICMP Echo Request/Reply流程说明 为了更好地理解如何使用Wireshark诊断ping命令的结果,下面给出一个简单的Python脚本用于模拟发出ICMP请求的过程(仅作示意用途): ```python import os target_ip = "8.8.8.8" os.system(f"ping {target_ip}") ``` 此代码片段执行了一个针对公共DNS服务器(8.8.8.8)的标准ping测试。之后可启动Wireshark监听相应的接口,过滤条件设为`icmp and host 8.8.8.8`,以此专注于感兴趣的通讯记录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值