当前位置: 首页 > news >正文

Wireshark抓包分析ICMP协议

「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》

分析目的:分析ICMP协议的数据格式、报文类型及作用。
操作系统:Windows 10 企业版
抓包工具:Wireshark 4.0.8

  • 第一步:捕获ICMP数据包
  • 第二步:分析报文类型
  • 第三步:分析数据报格式

第一步:捕获ICMP数据包

ping 命令底层使用了ICMP协议,使用 ping 命令,就可以观察到ICMP的「工作流程」

1)Wireshark「开启抓包」后, ping 一下我们的网关,触发ICMP协议。

  • cmd中执行命令:ping 192.168.2.1 -n 1

在这里插入图片描述

2)Wireshark的「显示过滤器」中过滤 icmp

  • 抓到了两个包:上面是ICMP「请求包」,下面是ICMP「响应包」
  • 因为我只Ping了一次,所有只抓了一对包,这样分析起来比较方便。

在这里插入图片描述


3)找到ICMP的数据包

  • 从上往下分别是这个数据包中,物理层、数据链路层、网络层、应用层使用的协议
  • 最下面的 Internet Control Message Protocol「首字母」连起来是ICMP,就是我们要找的ICMP协议,其他协议也是这种形式。

在这里插入图片描述


第二步:分析报文类型

ICMP协议通过的 Type Code 两个字段来表示「报文类型」,接收方根据报文类型执行对应的操作,以此来达到「控制」的效果。

因此,这里我们先看 Type Code 这两个字段。

1)先看第一个包,重点看我圈中的字段:

  • Type字段,标明了报文的类型, request 表示这是一个「请求」报文。
  • Code字段,标明了报文的代码。
  • Type=8,Code=0,表示这是一个回显请求(Ping请求)

在这里插入图片描述


2)再看第二个包,重点看我圈中的字段

  • Type字段,标明了报文的类型, reply 表示这是一个「响应」报文。
  • Code字段,标明了报文的代码。
  • Type=0,Code=0,表示这是一个回显应答(Ping应答)

在这里插入图片描述

第三步:分析数据报格式

接下来看看ICMP的报文数据格式,除了刚才讲的类型(Type)和代码(Code),还有其他字段。

在这里插入图片描述

1)「校验和」 Checksum 字段,用来验证报文是否有误

  • Checksum Status = Good,表示校验状态是良好的,报文无误

在这里插入图片描述

2)ICMP的响应中,会携带「响应时间」(Response time ),Ping命令返回的响应时间,就是从这里获取的

在这里插入图片描述


3)发送了多少「字节」,也可以在Data字段看到

在这里插入图片描述


4)BE 和 LE 这四个字段用来对应请求和响应的关系。

  • 请求和响应中,这四个字段都是一样的,用来标识这次请求。比如我给你发个1,你给我回个1,我就知道我们俩是同一个请求;如果你给我会个2,我就知道我们不是同一个请求,你是回给别人的,你不是会给我的。

在这里插入图片描述

平时使用,我们主要看Type 和 Code 这两个字段,知道ICMP的报文类型即可。

ICMP的报文类型有很多,详情可以参考我的另一篇文章:ICMP协议的功能及实现原理,ICMP协议报文类型

http://www.lryc.cn/news/176607.html

相关文章:

  • C++——安装环境、工具
  • 征稿啦!第 18 届「中国 Linux 内核开发者大会」重磅启动
  • JDBC8.0+
  • 聊聊常见的IO模型 BIO/NIO/AIO 、DIO、多路复用等IO模型
  • Linux- 网络编程初探
  • AVLoadingIndicatorView - 一个很好的Android加载动画集合
  • 我想设计一套游戏的奖励系统,有什么值得注意的?
  • 精通git,没用过git cherry-pick?
  • QT5|C++|通过创建子线程方式实现进度条更新
  • 基于mediasoup的webrtc server,性能压测时发现带宽利用率偏低(40%)
  • Ubuntu Redis开机自启动服务
  • Stm32_标准库_呼吸灯_按键控制
  • MySQL作业:索引、视图、存储、函数
  • 漫谈:C语言 C++ 所有编程语言 =和==的麻烦
  • 十五、异常(1)
  • Redis 哨兵模式搭建教程
  • 【C++】gnustl_static 与 c++_shared 的区别
  • 怎样选择第三方检测机构获取功能测试报告?
  • 【@PostConstruct、 @Autowired与构造函数的执行顺序】
  • 用vite搭建vue3+ts项目
  • 前端求职指南
  • datax同步数据翻倍,.hive-staging 导致的问题分析
  • DataGrip 恢复数据
  • 【深度学习实验】前馈神经网络(一):使用PyTorch构建神经网络的基本步骤
  • 【Unity】LODGroup 计算公式
  • 【数学建模】2023华为杯研究生数学建模F题思路详解
  • docker 安装 nessus新版、awvs15-简单更快捷
  • 使用API Monitor工具巧妙探测C++程序中监听某端口的模块
  • vue-grid-layout移动卡片到页面底部时页面滚动条跟随滚动
  • git查看自己所在的分支