IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> WireShark抓包原理解析及抓包实战教程 -> 正文阅读

[开发测试]WireShark抓包原理解析及抓包实战教程

1、WireShark快速分析数据包技巧

(1)确定 Wireshark的物理位置。如果没有一个正确的位置,启动 Wireshark后会花费很长时问捕获一些与自己无关的数据。“

(2)选择捕获接口。一般都是选择连接到Internet网络的接口,这样才可以捕获到与网络相关的数据。否则,捕获到的其它数据对自己也没有任何帮助。

(3)使用捕获过滤器。通过设置捕获过滤器,可以避免产生过大的捕获数据。这样用户在分析数据时,也不会受其它数据干扰。而且,还可以为用户节约大量的时间。”

(4)使用显示过滤器。通常使用捕获过滤器过滤后的数据,往往还是很复杂。为了使过滤的数据包再更细致,此时使用显示过滤器进行过滤。“

(5)使用着色规则。通常使用显示过滤器过滤后的数据,都是有用的数据包。如果想更加突出的显示某个会话,可以使用着色规则高亮显示。

(6)构建图表。如果用户想要更明显的看出一个网络中数据的变化情况,使用图表的形式可以很方便的展现数据分布情况。“

(7)重组数据。当传输较大的图片或文件时,需要将信息分布在多个数据包中。这时候就需要使用重组数据的方法来抓取完整的数据。Wireshark的重组功能,可以重组一个会话中不同数据包的信息,或者是重组一个完整的图片或文件。

2、实战:WireShark抓包及快速定位数据包技巧

2.1常见协议包

ARP协议

ICMP协议

TCP协议

UDP协议

DNS协议

HTTP协议

2.2使用 WireShark 进行抓包

启动WireSharke

2.3 混杂模式介绍

1)混杂模式概述:混杂模式就是接收所有经过网卡的数据包,包括不是发给本机的包,即不验证MAC地址。普通模式下网卡只接收发给本机的包(包括广播包)传递给上层程序,其它的包一律丢弃

一般来说,混杂模式不会影响网卡的正常工作,多在网络监听工具上使用。

2)关闭和开启混杂模式方法

打开wireshark,点击capture(捕获)——Options(选项)

勾选箭头,Enable promiscuous mde on all interfaces(在所有接口上使用混杂模式),这样就开启混杂模式,取消勾选,就变为普通模式

2.4 WireShark的过滤使用

开启混杂模式,在捕获过滤器处输入如下指令

1)host 172.16.12.15 捕获该IP相关的数据包

2)src 172.16.12.15 捕获该IP发出去的数据包

3)dst 172.16.12.15 捕获所有发给该IP的数据包

4)port 80 捕获和80端口有关的数据包

5)ether host [MAC地址] 捕获该MAC地址相关的数据包

在显示过滤器下面输入如下指令

1、tcp/arp/udp/http/dns等 捕获所有tcp数据包

2、ip.src_host == 172.16.12.15 or ip. dst_host ==172.16.12.2 捕获源地址是15或者目标地址是2的ip

3、ip.src_host == 172.16.12.15 and ip.dst_host ==172.16.12.2 捕获源地址是15且目标地址是2的ip and可以用&&表示

4、ip.addr == == 172.16.12.15 and ip.addr ==172.16.12.2

3 、实战:使用 WireShark 对常用协议抓包并分析原理

协议分析的时候我们关闭混淆模式,避免一些干扰的数据包存在。

3.1常用协议分析-ARP协议

地址解析协议(英语:Address Resolution Protocol,缩写:ARP)是一个通过解析网络层地址来找寻数据链路层地址的网络传输协议,它在 IPv4 中极其重要。ARP是通过网络地址来定位 MAC 地址。

关闭混杂模式,显示过滤器输入arp

Address Resolution Protocol (reply) #ARP 地址解析协议 reply 表示回复包

Hardware type: Ethernet (1) #硬件类型

Protocol type: IPv4 (0x0800 ) #协议类型~

Hardware size: 6 #硬件地址

Protocol size: 4 #协议长度

Opcode: reply(2) #操作码,该值为2 表示ARP回复包 1表示request请求包

Sender MAC address: XXXXXXXXXXXX(9c:61:21:75:55:50) #源MAC地址Sender IP address: 192.168.1.1 #源IP地址

Target MAC address: VMware_f1:35:ee (00:0c:29:f1:35:ee) #目标MAC地址Target IP address: 192.168.1.53 #目标 IP地址

总结:我们可以看到到应答包补全了自己的 MAC 地址,目的地址和源地址做了替换我们再来看两个数据包的请求和过程

Who has 192.168.1.1? Tell 192.168.1.53

192.168.1.1 is at 9c:61:21:75:55:50

192.168.1.53 广播:谁有192.168.1.1的MAC地址?

192.168.1.1 应答:192.168.1.1的MAC地址是XXXXXXXXXXX

3.2常用协议分析-ICMP协议

ICMP请求包

Internet Control Message Protocol

Type:8 (Echo (ping) request)

Code:0 #type0 协议类型8 code 0 代码0 表示请求报文

Checksum:Oxfd1c [correct] #校验和,用户检查错误的数据

[Checksum Status:Good] #校验状态:good

Identifier (BE):63126(Oxf696)

Identifier (LE):38646(0x96f6) #ID值,在应答包中返回该字段

Sequence Number (BE):1 (0x0001) #序列号依旧在应答包中返回该字段

Sequence Number (LE):256 (0x0100)

[Response frame:654] 响应帧的序列号:654

Timestamp from icmpdata:Sep 8,202108:54:30.000000000 EDT [Timestamp from icmp data(relative):0.746635014 seconds] Data (48 bytes)

ICMP响应包

Internet Control Message Protocol

Type:0(Echo (ping) reply)

Code:0 #type0 协议类型0 code 0 代码0 表示回显应答报文

Checksum:0x051d [correct] #校验和

「Checksum Status:Goodl

Identifier (BE):63126(Oxf696)

Identifier (LE):38646(0x96f6)

Sequence Number (BE):1 (0×0001)

Sequence Number (LE):256 (0x0100) #这里的ID和序列号和请求包一样

[Request frame:653] #请求帧的序列号

[Response time:60.003 ms] #响应时间

Timestamp from icmp data: Sep 8,2021 08:54:30.000000000 EDT [Timestamp from icmp data(relative):0.806637645seconds]Data (48 bytes) #填充数据,共48字节

本机发送一个ICMP Echo Request的包

接收方返回一个ICMP Echo Reply,包含了接受到数据拷贝和一些其他命令

3.3 常用协议分析-TCP协议

三次握手

三次握手统计图

到这里三次握手就结束了,下面是三次握手统计图

四次挥手

我们分析一下过程,我们在终端输入 EXIT 实际上是在我们Kali上执行的命令,表示我们SSHD的Server 端向客户端发起关闭链接请求。“

第一次挥手:服务端发送一个[FIN+ACK],表示自己没有数据要发送了,想断开连接,并进入FIN WAIT 1状态

第二次挥手:客户端收到 FIN 后,知道不会再有数据从服务端传来,发送 ACK 进行确认,确认序号为收到序号+1(与SYN相同,一个 FIN占用一个序号),客户端进入CLOSE_WAIT状态。

第三次挥手:客户端发送[FIN+ACK]给对方,表示自己没有数据要发送了,客户端进入LAST_ACK 状态,然后直接断开TCP会话的连接,释放相应的资源。+

第四次挥手:服务户端收到了客户端的 FIN 信令后,进入TIMED_WAIT状态,并发送ACK确认消息。服务端在TIMED_WAIT状态下,等待一段时间,没有数据到来,就认为对面已经收到了自己发送的ACK 并正确关闭了进入CLOSE 状态,自己也断开了TCP连接,释放所有资源。当客户端收到服务端的ACK回应后,会进入CLOSE状态并关闭本端的会话接口,释放相应资源。

3.4 常用协议分析-GTTP协议

┌──(root💀kali)-[~]

└─# curl -I baidu.com 请求百度头部字段

HTTP/1.1 200 OK

Date: Thu, 09 Sep 2021 11:53:50 GMT

Server: Apache

Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT

ETag: "51-47cf7e6ee8400"

Accept-Ranges: bytes

Content-Length: 81

Cache-Control: max-age=86400

Expires: Fri, 10 Sep 2021 11:53:50 GMT

Connection: Keep-Alive

Content-Type: text/html

第一步:我们我们发送了一个HTTP的HEAD请求

第二步:服务器收到我们的请求返回了一个Seq/ACK进行确认

第三步:服务器将 HTTP的头部信息返回给我们客户端 状态码为200 表示页面正常

第四步:客户端收到服务器返回的头部信息向服务器发送Seq/ACK进行确认

发送完成之后客户端就会发送FIN/ACK来进行关闭链接的请求。

4、实战:WireShark抓包解决服务器被黑上不了网

场景:服务器被黑上不了网,可以ping通网关,但是不能上网。

模拟场景

修改主机TTL值为1,下面的方式是我们临时修改内核参数。

┌──(root💀kali)-[~]

└─# cat /proc/sys/net/ipv4/ip_default_ttl

64

┌──(root💀kali)-[~]

└─# echo "1" > /proc/sys/net/ipv4/ip_default_ttl

┌──(root💀kali)-[~]

└─# cat /proc/sys/net/ipv4/ip_default_ttl

1

TTL(time to live): 数据报文的生存周期。每过一个网络设备,TTL值-1

默认 linux 操作系统值:64,每经过一个路由节点,TTL值减1。TTL值为0时,说明目标地址不可达并返回:Time to live exceeded

作用:防止数据包,无限制在公网中转发。我们测试结果

┌──(root💀kali)-[~]

└─# ping 192.168.0.1

PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.

From 192.168.0.36 icmp_seq=1 Time to live exceeded

64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=1.99 ms #网关可以ping通

┌──(root💀kali)-[~]

└─# ping baidu.com -c1

PING baidu.com (220.181.38.148) 56(84) bytes of data.

From localhost (192.168.0.1) icmp_seq=1 Time to live exceeded

#出了网关,TTL为0,数据包丢弃,百度ping不通

我们可以看到提示我们 Time to live exceeded 这表示超过生存时间,

我们判断和目标之间经过多少个网络设备是根据目标返回给我们的 TTL 值来判断的,因为我们发送的数据包是看不到的。

开启抓包,过滤ICMP,然后ping百度,抓包结果如下

我们可以看到第一个包是发送了一个ping 请求包ttl=1

然后呢我们收到了网关 192.168.1.1 返回给我们的数据包告诉我们超过数据包生存时间,数据包被丢弃。

那我们把 TTL值修改成2会有什么效果呢?

┌──(root💀kali)-[~]

└─# echo "2" > /proc/sys/net/ipv4/ip_default_ttl

──(root💀kali)-[~]

└─# ping baidu.com -c1 1 ?

PING baidu.com (220.181.38.251) 56(84) bytes of data.

From localhost (192.168.1.1) icmp_seq=1 Time to live exceeded

我们对比数据包发现返回我们数据包被丢弃的源地址变成了220.181.38.251,这证明了数据包在网络中已经到达了下一个网络设备才被丢弃,由此我们还判断出我们的运营商网关地址为 220.181.38.251,但是我们并没有到达目标主机。

那TTL恢复成正常的64,结果如何?

┌──(root💀kali)-[~]

└─# echo "64" > /proc/sys/net/ipv4/ip_default_ttl

┌──(root💀kali)-[~]

└─# ping baidu.com -c1

PING baidu.com (220.181.38.148) 56(84) bytes of data.

64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=1 ttl=50 time=16.9 ms

目标返回给我们的TTL值为50,这表示我们的TTL值需要大于64-50=14才可以访问百度

下载mtr 路由跟踪工具进行查看

┌──(root💀kali)-[~/Desktop]

└─# apt install mtr --fix-missing

检测到达www.baidu.com的所有节点的通信质量

┌──(root💀kali)-[~/Desktop]

└─# mtr www.baidu.com

如图,主机连接到百度需要经过13个设备(13跳),100%表示丢包严重,可能是被防火墙过滤、

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-10-21 12:42:27  更:2021-10-21 12:43:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 2:57:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码