基于Wireshark的ARP协议分析和IP报文、ICMP报文的分析|网络数据抓包|课程设计|traceroute|ping|
前言
那么这里博主先安利一些干货满满的专栏了!
首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。
高质量博客汇总
https://blog.csdn.net/yu_cblog/category_12379430.html?spm=1001.2014.3001.5482
目录
Wireshark软件使用与 ARP 协议分析
本小节实验内容包括:
WireShark基本使用
以太网的帧结构的分析和mac地址分析
ARP协议分析
思考题以及总结
WireShark基本使用
使用wireshark开始抓包
点击鲨鱼标志符号即可开始抓包,点击正方形红色符号,可以停止抓包。
添加抓包的筛选条件
当前我将筛选出基于tcp协议的且端口号位为80的所有数据包,如下图所示。
显示arp报文,如下图所示。
可以导出特定分组
以太网的帧结构的分析和mac地址分析
实验准备
另用上一次编写的基于TCP的HTTP服务器。用本地浏览器向远端阿里云服务器的HTTP服务器发送请求,设置端口号为8080,并利用wireshark捕捉整个过程的数据报文。
帧结构分析
以下是捕获的一个数据包的详细信息,通过右键连续点击可以打开如下界面。
Arrival Time 数据包的捕获时间:May 11, 2023 23:36:36.794865000
Frame Number 帧序号:250
Frame Length 数据包的长度:78 bytes
Capture Length 捕获的长度:78 bytes
Protocols in frame 协议封装层次 :etc:ethertype:ip:tcp
Time delta from previous captured frame 上一帧捕获的时间增量:0.067s
Time delta from previous displayed frame 上一帧显示的时间增量:0.0s
mac地址分析
在Ethernet帧头部,有两个重要的标志位,分别是LAC位和IG位,其中LAC位对应的是第13位,IG位对应的是第14位。
LAC位(也称为LG bit)表示本帧是否为组播帧,当LAC位设置为“1”时,表示该帧为组播帧;当LAC位设置为“0”时,表示该帧为单播帧或广播帧。
IG位(也称为IG bit)表示本帧是否需要被交换机进行学习,当IG位设置为“1”时,表示本帧不需要进行学习,即不需要将发送端的MAC地址加入到交换机的MAC地址表中;当IG位设置为“0”时,表示本帧需要进行学习,即需要将发送端的MAC地址加入到交换机的MAC地址表中。
在以太网中,如果一个数据包是广播或组播帧,那么交换机会对它进行广播,使得被连接的所有设备都可以接收到该数据包。而如果是单播帧,交换机只会将它发送给目标MAC地址所对应的端口。因此,LAC位和IG位的设置对于以太网中广播、组播和单播帧的处理及交换机的学习过程非常重要。
在本次实验的mac帧中,所有的LG位和IG位都是0,表示是一个需要学习的单播帧。
通过点击数据报,选择Ethernet II
选项,可以查看帧的详细信息。
现在将开始分析每一个字段以及所对应的字节范围。
一个标准的mac头部包含14字节,其中包括源mac地址(6字节),目标mac地址(6字节)和协议类型(2字节),结构如下图所示。
在wireshark中体现如下图所示。
后面的字节部分,就是要向上交付(网络层)的有效载荷了,是一个完整的IP报文。其中IP报文的有效载荷,即为一个完整的TCP报文。
分析arp数据包并描述arp协议工作过程
捕获与本机同网段ARP报文步骤
在mac电脑上使用
sudo arp -d -a
命令清空 ARP 缓存。
在wireshark上选择捕获选项,设置捕获本地的本机接口
- 在过滤条件中输入
arp
,捕获到一个ARP报文
本机同网段ARP报文分析
除了报文前14个字节,其余都属于ARP报文,格式如下图所示。
通过与Wireshark上的字段一一对应,可以得出该报文的信息,如下所示。
硬件类型: Ethernet (1) 协议类型: IPv4 (0x0800) 硬件地址长度: 6 协议地址长度: 4 操作: reply (2) 源MAC地址: 22:37:a5:51:ae:64 (22:37:a5:51:ae:64) 源IP地址: 172.20.10.1 目标MAC地址: Apple_0c:35:22 (ac:c9:06:0c:35:22) 目标IP地址: 172.20.10.3
本机不同网段ARP报文分析
捕获结果如下所示。
筛选出的数据包中Destination字段为Broadcast的数据包即为想要跨网段传输的ARP数据包。
这是因为ARP请求通常都是以广播的形式发送的,因此以太网层的目的地址字段应该设置为全F,表示数据包将发送到本地网络中的所有设备。而ARP层的目标MAC地址字段设置为全0,因为ARP请求的目的是查找某个IP地址的MAC地址,此时该IP地址对应的MAC地址尚未被确定,因此ARP层的目标MAC地址字段应该设置为全0。如下图所示。
请求和响应过程分析以及同网段和跨网段arp报文对比
同网段的情况
当本机发送一个 ICMP 报文给同一网段的另一个设备时,它会先查询本地的 ARP 缓存表,查找目标设备的 MAC 地址。如果缓存中没有该设备的 MAC 地址,则该设备需要发送一个 ARP 请求包以获取目标设备的 MAC 地址。
ARP请求包是一个广播包,在本机所在网络内传播。该包包含源 MAC 地址和源 IP 地址(本机的 IP 地址),目标 IP 地址和目标 MAC 地址。
当目标设备接收到 ARP 请求包时,它将检查包中的目标 IP 地址,如果目标 IP 地址和它的 IP 地址匹配,该设备将生成并发送一个 ARP响应包。
ARP 响应包是一个单播包,将仅发送到请求来源设备的 MAC 地址。该包包含源 MAC 地址和源 IP 地址,目标 IP 地址和目标 MAC 地址。
当请求来源设备接收到 ARP 响应包时,它将更新本地 ARP 缓存表并保存目标设备的 MAC 地址。在以后的通信中,该设备可以直接使用目标设备的 MAC 地址。
这样,请求/响应的过程就完成了。本机和目标设备之间建立了一个 ARP 表项和对应的 MAC 地址,以便将来通信时可以更快地查找目标设备的 MAC 地址。
不同网段的情况
与本机同一网段的 ARP 数据包和与本机不同网段的 ARP 数据包之间的主要区别是目标 MAC 地址和源 IP 地址的不同。
当本机与不同网段的设备通信时,本机将首先使用 ARP 查询其默认网关,然后使用默认网关的 MAC 地址将通信路由到外部网络。在这种情况下,ARP 请求中的目标 IP 地址是路由器网关的 IP 地址(如下图所示),而不是目标设备的 IP 地址。
IP与ICMP 分析
IP报头分析和ICMP请求帧和回应帧的对比
实验内容
实施ping命令,记录引发的IP数据报和ICMP报文,保存为pcapng文件。解释任一个IP数据报的首部,并对比 ICMP Echo请求帧和回应帧。改变ping的长度参数,解释IP数据报分片情况。
捕获过程
在过滤器框中输入ping命令的过滤器表达式:
icmp && icmp.type==8
。这将只显示与ping命令相关的ICMP Echo请求报文。在终端窗口中执行ping命令。例如,执行以下命令:
ping 192.168.0.1
在Wireshark中捕获和分析ping命令生成的数据包。
停止捕获后,选择“文件”->“保存为”,选择pcapng格式并保存文件。
捕获结果如下图所示
分析一个IP数据报
下图是一个IP数据报文的结构。
下面是Wireshark的捕捉结果以及其IP报文的分析。
字段分析结果: 版本 Version: 4 头部长度 Header Length: 20 bytes (5) 服务类型 Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT) 总长度 Total Length: 84 标识符 Identification: 0x503b (20539) 标志 Flags: 0x0 片位移 Fragment Offset: 0 存活时间 Time to Live: 64 上层协议 Protocol: ICMP (1) 报头校验和 Header Checksum: 0xa0bf [validation disabled] 源IP地址 Source Address: 172.28.28.233 目的IP地址 Destination Address: 192.168.0.1
ICMP请求帧和回应帧的对比
我利用自己的电脑ping自己的平板电脑,Wireshark捕获结果如下,可以得到一系列请求帧和回应帧。
ICMP是一个运行在IP层之上的协议,用于在IP网络中传递控制消息。ICMP Echo Request和ICMP Echo Reply都是ICMP报文的一种类型,它们包含了Type、Code、Checksum、Identifier、Sequence Number等字段。如下图所示。
通过对比请求帧和回应帧,可以分析两者之间的差异。
ICMP Echo Request的Type字段是8,Code字段是0,而ICMP Echo Reply的Type字段是0,Code字段也是0。这两个报文的其它字段也可能会有不同。例如,ICMP Echo Request报文通常包含一个Identifier(标识符)字段和一个Sequence Number(序列号)字段,而ICMP Echo Reply报文则包含与之前发送的Echo Request报文相同的Identifier和Sequence Number字段。
此外,当ICMP Echo Request报文超时或收到错误响应时,通常会返回一个终止这一过程的ICMP错误报文,其中Type字段是11,Code字段是0(ICMP Time Exceeded报文)或Type字段是3,Code字段是0(ICMP Destination Unreachable报文)。(这一部分的现象,将会在 ICMP 差错报文分析部分作详细体现)
IP报文分片分析
我通过ping
向自己的平板电脑发送请求,并把报文长度不断增加,此时可以观察到IP报文分片的现象。
ping 172.20.10.4 -s 3000
(报文长度为3000为例)
为什么会有IP报文分片现象
IP报文分片的原因是由于传输过程中可能会遇到MTU(Maximum Transmission Unit,最大传输单元)限制的问题,即网络的传输介质(例如以太网)能够传输的每个数据包的最大大小有限制。如果IP报文的大小超过了MTU,那么就需要将其分成多个较小的数据包进行传输,这就是IP报文分片的作用。分片操作由发送端进行,接收端需要将分片后的数据包进行重组,还原出原始的IP报文。
实验结果
通过不断调整数据包大小和长度,最终实验做得,当数据包大小达到1484
时,ip数据包开始分片。
以下是分片和不分片的ip数据报文对比。
通过实验结果可以分析得知,分片的IP数据报文和不分片的IP数据报文主要区别在于大小和标识字段的设置。
大小:不分片的IP数据报文大小不超过MTU限制,而分片的IP数据报文可根据MTU的限制被切割成多个较小的数据片进行传输。
标识:不分片的IP数据报文中的标识字段为0,而分片的IP数据报文中的标识字段一般是相同的,以便接收端在接收到多个数据片时能够准确地将它们组装在一起恢复原始的IP数据报文。
另外,分片的IP数据报文还会包含偏移量字段,用于指示数据片在原始IP数据报文中的位置。而不分片的IP数据报文中则没有此字段。
在实验中,我认为通过观察是否含有偏移量字段(偏移量字段是否为0),是最好的也是最方便判断ip数据报是否分段的方法。
ICMP差错报文分析
要求:实施 tracert 命令,记录引发的ICMP报文,保存为pcapng 文件;解释 任一个 ICMP 差错报文的结构;描述 tracert 工作原理,结合 ICMP 报文记录画出数据交互示意图。
捕获步骤
使用traceroute
命令,traceroute 172.20.10.4
,终端现象如下图所示。
利用wireshark捕获icmp报文。
这样我们就捕获到了一系列的icmp差错报文。
ICMP差错报文分析
以下是一个差错报文。
报文类型 Type: 11 (Time-to-live exceeded) 表示时间超时 代码 Code: 0 (Time to live exceeded in transit) 校验和Checksum: 0x9d17 [correct] [Checksum Status: Good] Unused: 00000000 Internet Protocol Version 4, Src: 172.29.69.176, Dst: 172.20.10.4 User Datagram Protocol, Src Port: 62171, Dst Port: 33435
我们可以对比之前的请求帧和回应帧中的ICMP报文的信息,可以发现,报文类型Type
这个字段是不同的。目前我们所知的,请求帧是8,回应帧是0,而本次实验的超时报文是11。
通过查阅资料,我查询到了Type码所对应报文类型的解释,如下表所示。
在区分这些报文时,一般可以通过ICMP报文头中的类型和代码字段来判断是哪一种类型的报文。对于差错报文还可以使用IP头中的“协议字段”和ICMP报文中的TTL等信息来判断报文的信息。
traceroute工作原理分析
traceroute是一种用于测试网络连接路径和瓶颈的命令行工具。其基本原理是在每次发送ICMP数据报时,将数据报的TTL字段递增,每一次经过一个路由器都会将数据报TTL递减,直到TTL减为0为止。当TTL减为0时,路由器将数据报丢弃,并向发送方返回一条“ICMP Time Exceeded”的差错报文,同时包含该路由器的IP地址。
traceroute通过向目标主机发送一系列TTL值递增的ICMP报文,并记录每次传输消耗的时间,推算出TTL值递增的顺序,即数据报的经过路由列表,从而得出源主机到目标主机的完整路由路径。
简单来说,traceroute的工作流程如下:
设置TTL值为1,向目标主机发送一个Ping消息,第一个路由器收到Ping消息后,将TTL减1,把消息向目标主机转发,同时返回一个ICMP差错报文,表示时间已超时。
设置TTL值为2,向目标主机发送一个Ping消息,第二个路由器收到Ping消息,将TTL减1,把消息向目标主机转发,同时返回一个ICMP差错报文,表示时间已超时。
逐渐增加TTL值,直至目标主机收到数据包,返回一个ICMP回应报文,表示目标主机已接收到消息。
根据返回的ICMP差错报文和ICMP回应报文以及每次发送和接收的时间,推算出每一个路由器的IP地址和延迟时长,从而得到源主机到目标主机的完整路由路径。
根据ICMP报文的数据交互示意图
根据ICMP报文的数据交互示意图如图所示。
基于Wireshark的ARP协议分析和IP报文、ICMP报文的分析|网络数据抓包|课程设计|traceroute|ping|的更多相关文章
- Wireshark数据抓包分析——网络协议篇
Wireshark数据抓包分析--网络协议篇 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF4dWViYQ==/ ...
- Wireshark数据抓包教程之Wireshark的基础知识
Wireshark数据抓包教程之Wireshark的基础知识 Wireshark的基础知识 在这个网络信息时代里,计算机安全始终是一个让人揪心的问题,网络安全则有过之而无不及.Wireshark作为国 ...
- Wireshark数据抓包教程之认识捕获分析数据包
Wireshark数据抓包教程之认识捕获分析数据包 认识Wireshark捕获数据包 当我们对Wireshark主窗口各部分作用了解了,学会捕获数据了,接下来就该去认识这些捕获的数据包了.Wiresh ...
- 手机数据抓包以及wireshark技巧
本文主要讨论一种非常方便的抓取Android和iphone手机网络数据包的办法,以及介绍wireshark最常用的技巧 抓包工具介绍 (1).网页抓包工具 Chrome浏览器插件 FireBug 插件 ...
- Wireshark数据抓包教程之Wireshark捕获数据
Wireshark数据抓包教程之Wireshark捕获数据 Wireshark抓包方法 在使用Wireshark捕获以太网数据,可以捕获分析到自己的数据包,也可以去捕获同一局域网内,在知道对方IP地址 ...
- Wireshark数据抓包教程之安装Wireshark
Wireshark数据抓包教程之安装Wireshark 安装Wireshark 通过上一节的学习可以根据自己的操作系统来下载安装Wireshark了.本书中已开发版1.99.7(中文版)为主,下面介绍 ...
- 【原创】医鹿APP九价HPV数据抓包分析
本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! 医鹿APP九价HPV数据抓包分析 操作环 ...
- tcp、udp、ip、icmp报文格式分析
TCP .UDP .IP. ICMP协议报文格式分析 Tcp报文格式: Wireshark抓包如图: 源端口/目的端口(16bit): 在TCP报文中包涵了源端口/目的端口,源端口标识了发送进程,目的 ...
- 分析移动端APP的网络请求抓包
为了方便,本文以 iOS 系统来进行演示. 使用代理 移动操作系统中都有可以设定系统代理的设置,比如在 iOS 中可以通过 Settings->WLAN 看到很多 Networks,通过点击它们 ...
- 基于ipv6的数据抓包
一.实验拓扑 二.配置过程 以r1为例 R1: R1(config)#int f0/0 R1(config-if)#ipv6 enable R1(config-if)#ipv6 address 200 ...
随机推荐
- GDP折线图
1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset=" ...
- windows10测试时如何构造大图片(如超过8M+的图片)
1.原图片(大小40k) 2. 选怎一个容量大的文件如视频文件8M+ 3.使用copy命令进行扩容(cmd命令行操作): copy test01.jpg /b + 8M.MP4 test01_8M.j ...
- java基础(4)--javadoc文档与命令
一.Javadoc文档 javadoc是Sun公司提供的一个技术,它从程序源代码中抽取类.方法.成员等注释形成一个和源代码配套的API帮助文档.也就是说,只要在编写程序时以一套特定的标签作注释,在程序 ...
- 面向对象SOLID原则-设计模式-第2篇
面向对象设计的SOLID原则 1.开放封闭原则 一个软件实体 (类,函数,模块) 对扩展开放,对修改关闭.也就是 软件实体 应该尽量在不修改原有代码的情况下 进行扩展 举个例子, 装饰器的使用,就可以 ...
- docker 安装 nacos
转载请注明出处: https://www.jianshu.com/p/54f6da71ac48
- [转帖]Redhat 8 磁盘调度策略变化:NOOP改为NONE
说明 在 redhat 4/5/6/7版本中的NOOP调度策略,从8开始修改为NONE,官方解释: none Implements a first-in first-out (FIFO) schedu ...
- 【转帖】nginx变量使用方法详解-3
https://www.diewufeiyang.com/post/577.html 也有一些内建变量是支持改写的,其中一个例子是 $args. 这个变量在读取时返回当前请求的 URL 参数串(即请求 ...
- [转帖] Linux命令拾遗-入门篇
https://www.cnblogs.com/codelogs/p/16060394.html 原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介# 之前出过很多和 ...
- [转帖]记录自己安装内存带宽测试工具——Stream过程
测试环境: CPU:Kunpeng 920 8Core MEM:16G Storage:200G OS:openEuler 20.03 (LTS-SP3) 1 服务器资源监控工具--Stream 1. ...
- IPV6的简单学习与整理
背景 大概2018年时曾经突击学习过一段时间IPV6 当时没太有写文档的习惯,导致这边没有成型的记录了. 今天又有项目要求使用IPV6, 想了想就将之前学习的部分 还有想继续学习提高的部分进行一下总结 ...