| |
|
开发:
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 获取客户端地址 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |