【超详细】Wireshark教程----Wireshark 分析ICMP报文数据试验
一,试验环境搭建
1-1 试验环境示例图

1-2 环境准备
两台kali主机(虚拟机)
kali2022 192.168.220.129/24
kali2022 192.168.220.3/27
1-2-1 网关配置:

编辑-------- 虚拟网路编辑器

更改设置进来以后 ,先选择NAT模式,然后是NAT设置


网关配置好确定
1-2-2 IP地址配置
首选更改网络连接模式为NAT模式


两个主机都设置成NAT模式以后开机 ,打开终端修改A主机的配置,指令如下:
nmcli connection edit Wired\ connection\ 1
goto ipv4.addresses
change
192.168.220.129/24
back
goto gateway
change
192.168.220.2
back
back
save
activate
quit
截图如下:

这样主机A的IP地址设置完成
以同样的方法设置主机B的IP地址
nmcli connection edit Wired\ connection\ 1
goto ipv4.addresses
change
192.168.220.3/27
back
goto gateway
change
192.168.220.2
back
back
save
activate
quit

1-2-3 Mac地址配置
修改A主机的mac地址,修改为00:aa:aa:aa:aa:aa
macchanger --mac=00:aa:aa:aa:aa:aa eth0

修改好了查看A主机的网络配置
ip addr show

修改B主机的mac地址,修改为00:bb:bb:bb:bb:bb
macchanger --mac=00:bb:bb:bb:bb:bb eth0

修改好了查看一下B主机的网络配置
ip addr show

试验环境准备好了,接下来就开始抓包,开始分许
二,详细试验步骤
为了避免物理机网络的干扰,最好是物理机断网进行试验
2-1 主机A--- Ping ---主机B
2-1-1 理论分析过程图解

2-1-2 判断对方是否跟自己处在同一个网段
A主机判断B主机是否跟自己同一个网段
A_IP:192.168.220.129
GW:255.255.255.0
B_IP:192.168.220.3
GW:255.255.255.254
第一步:把A主机的IP地址转换为二进制
11000000.10101000.11011100.10000001
第二步:A主机的子网掩码转换成二进制
11111111.11111111.11111111.00000000
第三步:对两者进行‘与’操作,全1得1,有零得零,最后得到结果
11000000.10101000.11011100.10000001
11111111.11111111.11111111.00000000
得到结果为 11000000.10101000.11011100.0000000
转换成十进制为:192.168.220.0
第四步:把B主机的IP地址转换为二进制
11000000.10101000.11011100.00000011
第五步B主机二进制IP地址跟A主机二进制子网掩码进行‘与’操作:
11000000.10101000.11011100.00000011
11111111.11111111.11111111.00000000
得到结果为 11000000.10101000.11011100.0000000
转换成十进制为:192.168.220.0
结论:得到都是192.168.220.0 A主机跟B主机处于同一个网段
B主机判断A主机是否跟自己同一个网段
A_IP:192.168.220.129
GW:255.255.255.0
B_IP:192.168.220.3
GW:255.255.255.254
第一步:把B主机的IP地址转换为二进制
11000000.10101000.11011100.00000011
第二步:B主机的子网掩码转换成二进制
11111111.11111111.11111111.11100000
第三步:对两者进行‘与’操作,全1得1,有零得零,最后得到结果
11000000.10101000.11011100.00000011
11111111.11111111.11111111.11100000
得到结果为 11000000.10101000.11011100.0000000
转换成十进制为:192.168.220.0
第四步:把A主机的IP地址转换为二进制
11000000.10101000.11011100.10000001
第五步:A主机二进制IP地址跟B主机二进制子网掩码进行‘与’操作:
11000000.10101000.11011100.10000001
11111111.11111111.11111111.11100000
得到结果为 11000000.10101000.11011100.10000000
转换成十进制为:192.168.220.128
结论:得到分别是192.168.220.0 和 192.168.220.128 所以B主机跟A主机不在同一个网段
总结:简单来说就是主机A拿自己的IP地址的二进制和子网掩码的二进制进行异或运算得到一个IP地址,主机A再拿B主机的IP地址跟自己自己的子网掩码进行同样的异或运算得到另一个IP地址,看这两个IP地址是否一样
2-1- 3 试验分析
主机A,主机B打开wireshark工具

搜索wireshark
打开以后 捕获---选项---eth0 (两个主机的都打开转备好,但别开始)
注意:一定要关掉最下面的‘在所有接口上使用混杂模式’

主机A输入ping命令(准备好,不要运行)
ping -c 192.168.220.129
接下来迅速打开连个主机的wireshark 点击开始进行抓包
然后迅速回到A主机回车执行ping 命令
执行完以后两个主机停止抓包
主机A的数据包

主机B的数据包

分析过程
主机A先判断主机B是否跟自己同一个网段,发现是跟自己同一个网段
A4:广播问谁有主机B的Mac地址
A5:B回复了自己的Mac地址
A2:A封装自己的ICMP报文以后,直接发给了B(源Mac是自己,目标Mac是主机B)
B3:由于B判断A跟自己不是一个网段,所以通过广播询问网关Mac地址
B4:网关回复了自己的Mac地址给B
B2:主机B封装ICMP回复信息发给A主机,但是注意报文内容,源Mac是自己,目标Mac是网关
这个数据包会送到网关那里,由网关转发给A主机,可能抓包没抓完整,网关通过ARP协议问主机A的Mac地址过程没有抓出来,应该是网关拿到数据以后发现是发给主机A的,就会广播询问主机A的Mac地址的。
注意:主机A,主机B抓到的有些包是一样的,比如A4和B5,B6和A5,是因为ARP是广播协议,何为广播?每个主机都能听得到,所以两个主机抓到的有些包一样。
2-2 主机B---ping ---主机A
2-2-1 理论分析过程
01:主机B先判断A是不是跟自己一个网段,发现不是跟自己一个网段
02:主机B就会广播的方式问网关的mac地址
03:网关把自己的mac地址发给B
04:主机B封装ICMP报文以后发给主机A,源Mac是自己,目标Mac是网关,由网关进行转发
05:主机A收到B的ICMP报文以后会需要回复,所以先判断主机B是否跟自己同一个网段
发现主机B是跟自己同一个网段
06:这时候A会广播问主机B的Mac地址
07:主机B把自己的Mac地址回复给A主机
08:A主机封装ICMP数据包直接发送给B,源mac:主机A自己,目标Mac:B主机的Mac
2-2-2 试验分析
如果达到更好的效果,应该虚拟机恢复拍照,重新配置网路信息,因为经过一轮通信以后很有可能会ARP缓存,有了缓存以后有些时候就不需要发ARP广播了,直接根据缓存进行发包。
不过我就直接演示了
按上述步骤抓包
ping 192.168.220.129
主机B的数据包

主机A的数据包

分析过程
先判断自己是不是A主机一个网段,结果不是(之间讲了如何判断)
所以先询问网关的Mac地址
B4:询问网关的Mac地址
B5:网关回复自己的Mac地址
B1:主机B封装ICMP数据发给A主机(注意源Mac是自己,目标Mac是网关,不信看一下数据包内容,第二行src表示源Mac地址,dst表示目标Mac地址)
B2:网关拿到数据发现要发给主机A,发广播询问主机A的Mac地址
A2:主机A收到广播以后告诉网关自己的Mac地址,网关就会把数据转交给主机A
主机A收到报文,需要回复,先判断主机B是否跟自己一个网段,发现是
A5:主机A广播询问B的Mac地址
A6:主机B收到广播进行回复,把自己的Mac地址告诉主机A
A4:主机A直接对主机B进行回复,源Mac是自己的,目标Mac是主机B的(因为对于主机A,主机B跟自己处于一个网段,看一下这个数据包内容把)
果然src是主机A自己,dst是主机B
三,试验建议
最好是通过kali linux去做,修改MAC地址比较方便
在抓包的时候关闭混杂模式
在抓包之后,注意清空ARP缓存
最好是只ping 一个包,通过-c 来指定个数
四,总结
其实做这个试验之前,我对如何判断两个主机是否处于同一个网段,如何用ICMP协议通信等比较模糊,甚至认为两个主机处在同一个网段就处在同一个网段。现在才发现还有相对之分,就比如说本试验以A的视角,主机B跟主机A就是同一个网段,以B的视角主机B跟主机A不在同一个网段,虽然是A ping B 然后B ping A .但是两者通信还是有所区别的。本试验关键点就是理解一些概念,还要会判断两个主机是否处于同一个网段等,希望大家也能自己动手去分析分析具体过程。
相关文章:
【超详细】Wireshark教程----Wireshark 分析ICMP报文数据试验
一,试验环境搭建 1-1 试验环境示例图 1-2 环境准备 两台kali主机(虚拟机) kali2022 192.168.220.129/24 kali2022 192.168.220.3/27 1-2-1 网关配置: 编辑-------- 虚拟网路编辑器 更改设置进来以后 ,先选择N…...
Linux命令(92)之rm
linux命令之rm 1.rm介绍 linux命令rm是用来删除一个或多个文件/目录,由于其删除的不可逆性,建议在日常工作中一定要慎用 2.rm用法 rm [参数] 文件/目录 rm常用参数 参数说明-r递归删除文件或目录-f不提示强制删除-i删除文件或目录前进行确认-v详细显…...
Mysql主从复制数据架构全面解读
大家好,我是山子,今天给大家分析Mysql 实现主从复制的方方面面,主从复制当然也是我们做读写分离的前提,以下内容是从各网络平台摘录整理总结归纳在一起的;内容已经从主从复制的各方面的维度进行了阐述;非常…...
ios证书类型及其作用说明
ios证书类型及其作用说明 很多刚开始接触iOS证书的开发者可能不是很了解iOS证书的类型功能和概念。下面对iOS证书的几个方面进行介绍。 apple开发账号分类: 免费账号: 无需支付费用给apple,使用个人信息注册的账号 可以开发测试安装&…...
警告-Ubuntu提示W: Possible missing firmware xxx解决方法
目录 现象原因解决方法 现象 当执行 sudo apt-get update或者sudo apt-get dist-upgrade时,有如下警告: W: Possible missing firmware /lib/firmware/rtl_nic/rtl8125a-3.fw for module r8169 W: Possible missing firmware /lib/firmware/rtl_nic/rt…...
有时候,使用 clang -g test.c 编译出可执行文件后,发现 gdb a.out 进行调试无法读取符号信息,为什么?
经过测试,gdb 并不是和所有版本的 llvm/clang 都兼容的 当 gdb 版本为 9.2 时,能支持 9.0.1-12 版本的 clang,但无法支持 16.0.6 版本的 clang 可以尝试使用 LLVM 专用的调试器 lldb 我尝试使用了 16.0.6 版本的 lldb 调试 16.0.6 的 clan…...
UG\NX二次开发 信息窗口的一些操作 NXOpen/ListingWindow
文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 简介: UG\NX二次开发 信息窗口的一些操作 NXOpen/ListingWindow 效果: 代码: #include "me.hpp" #include <NXOpen/ListingWindow.hxx> #include <…...
macbook电脑磁盘满了怎么删东西?
macbook是苹果公司的一款高性能笔记本电脑,受到很多用户的喜爱。但是,如果macbook的磁盘空间不足,可能会导致一些问题,比如无法开机、运行缓慢、应用崩溃等。那么,macbook磁盘满了无法开机怎么办,macbook磁…...
解释 RESTful API,以及如何使用它构建 web 应用程序
RESTful API是一种基于HTTP协议,使用REST架构风格设计的API。其核心思想是将所有的Web应用程序资源抽象为一组资源集合,并通过HTTP协议中的GET、POST、PUT、DELETE等几个方法对这些资源进行操作,使得Web应用程序能够方便地、高效地进行管理和…...
qml使用c++自定义listmodel数据
qml要使用c中自定义的model,首先该model类需要继承QAbstractListModel类,然后需要重写其中的三个函数,分别是 int rowCount(const QModelIndex &parent); QVariant data(const QModelIndex &index, int role Qt::DisplayRole); QHas…...
cf 解题报告 01
E. Power of Points Problem - 1857E - Codeforces 题意: 给你 n n n 个点,其整数坐标为 x 1 , … x n x_1,\dots x_n x1,…xn,它们位于一条数线上。 对于某个整数 s s s,我们构建线段[ s , x 1 s,x_1 s,x1], [ s , x…...
傅里叶系列 P1 的定价选项
如果您想了解更多信息,请查看第 2 部分和第 3 部分。 一、说明 这是第一篇文章,我将帮助您获得如何使用这个新的强大工具来解决金融中的半分析问题并取代您的蒙特卡洛方法的直觉。 我们都知道并喜欢蒙特卡洛数字积分方法,但是如果我告诉你你可…...
第二十届北京消防展即将开启,汉威科技即将精彩亮相
10月10日~13日,第二十届中国国际消防设备技术交流展览会,将在北京市顺义区中国国际展览中心新馆隆重举行。该展会由中国消防协会举办,是世界三大消防品牌展会之一,本届主题为“助力产业发展,服务消防救援”。届时将有4…...
mongodb、mysql、redis 区别
MongoDB、MySQL 和 Redis 是三种不同的数据库管理系统,它们在数据存储、访问模型和使用场景方面有一些显著的区别。 1. 数据存储模型: MongoDB:MongoDB 是一种文档数据库,它使用 BSON(Binary JSON)格式来存储数据。数据以文档的形式组织,每个文档可以有不同的字段,文档…...
【Flutter】Flutter Web 开发 如何从 URL 中获取参数值
【Flutter】Flutter Web 开发 如何从 URL 中获取参数值 文章目录 一、前言二、Flutter Web 中的 URL 处理三、如何从 URL 中获取参数四、实际业务中的用法五、完整示例六、总结 一、前言 大家好!我是小雨青年,今天我想和大家分享一下在 Flutter Web 开发…...
【Java 进阶篇】JDBC Statement:执行 SQL 语句的重要接口
在Java应用程序中,与数据库进行交互是一项常见的任务。为了执行数据库操作,我们需要使用JDBC(Java Database Connectivity)来建立与数据库的连接并执行SQL语句。Statement接口是JDBC中的一个重要接口,它用于执行SQL语句…...
Python与数据分析--Pandas操作进阶
目录 1.文件读取方式 1.1.绝对路径读取文件 1.2.相对路径读取文件 2.列表数据操作 2.1.列索引指定 2.2.代码数据对齐 3.创建新CSV文件 4.缺失值处理 4.1.缺失值创建 4.2.缺失值检索 4.3.缺失值查询 4.3.1.isnull()函数判断 4.3.2.notnull()函数判断 4.3.3.any()函数…...
国庆小练习
一、二、三 一、 创建一个双向链表, 将26个英文字母通过头插的方式插入到链表中 通过尾删的方式将数据读取出来并删除。main.c #include <my_head.h> #include "dblink.h"int main(int argc, const char *argv[]) {dblink *h create_head();for…...
springboot单体项目如何拆分成微服务
要将一个Spring Boot单体项目拆分成微服务,可以按照以下步骤进行操作: 识别业务域:首先,需要对单体项目进行业务域的划分。将项目中的功能按照业务领域进行分类,每个业务领域可以成为一个独立的微服务。 定义服务接口…...
解决recovery页面反转的问题
1.前言 在android 10.0的系统rom定制化开发工作中,在系统中recoverv的页面也是相关重要的一部分,在系统recovery ta升级等功能,都是需要recoverv功能的,在某些产品定制化中 在recovery的时候,发现居然旋转了180度&…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...


