WireShark简介和抓包原理及过程
1.1 WireShark简介
Wireshark是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能
显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交
换。
1.2 WireShark的应用
网络管理员使用Wireshark来检测网络问题,网络安全工程师使用Wireshark来检查资讯安全
相关问题,开发者使用Wireshark来为新的通讯协议除错,普通使用者使用Wireshark来学习网络协
议的相关知识。当然,有的人也会“居心叵测”的用它来寻找一些敏感信息......
1.3 WireShark快速分析数据包技巧
(1) 确定Wireshark 的物理位置。如果没有一个正确的位置,启动Wireshark后会花费很长的
时间捕获一些与自己无关的数据。
(2) 选择捕获接口。一般都是选择连接到Internet网络的接口,这样才可以捕获到与网络相关的
数据。否则,捕获到的其它数据对自己也没有任何帮助。
(3) 使用捕获过滤器。通过设置捕获过滤器,可以避免产生过大的捕获数据。这样用户在分析
数据时,也不会受其它数据干扰。而且,还可以为用户节约大量的时间。
(4) 使用显示过滤器。通常使用捕获过滤器过滤后的数据,往往还是很复杂。为了使过滤的数
据包再更细致,此时使用显示过滤器进行过滤。
(5) 使用着色规则。通常使用显示过滤器过滤后的数据,都是有用的数据包。如果想更加突出
的显示某个会话,可以使用着色规则高亮显示。
(6) 构建图表。如果用户想要更明显的看出一个网络中数据的变化情况,使用图表的形式可以
很方便的展现数据分布情况。
(7) 重组数据。当传输较大的图片或文件时,需要将信息分布在多个数据包中。这时候就需要
使用重组数据的方法来抓取完整的数据。Wireshark 的重组功能,可以重组一个会话中不同数据包
的信息或者是重组一个完整的图片或文件。
实战: WireShark抓包及快速定位数据包技巧
2.1 常见协议包
本节课主要分析以下几种协议类型。
ARP协议
ICMP协议
TCP协议
UDP协议
DNS协议
HTTP协议
2.2 kali 启动 wireshark
2.3 混杂模式介绍
1、混杂模式概述:混杂模式就是接收所有经过网卡的数据包,包括不是发给本机的
包,即不验证MAC地址。普通模式下网卡只接收发给本机的包(包括广播包)传递给上
层程序,其它的包一律丢弃。
一般来说,混杂模式不会影响网卡的正常工作,多在网络监听工具上使用。
2、关闭和开启混杂模式方法
这样就切换到了普通模式,默认是开启混杂模式
2.4 WireShark的过滤器使用
我们开启混淆模式来做一下感受,我们再次捕获---在所有接口上使用混杂模式就可以直接进
行抓包
访问完成后点击停止抓包即可,我们不需要抓太多的数据包。
我们可以看到有很多数据包但是我们怎么才能找到对应的数据包类型呢?
这里就是我们的过滤器,我们可以根据自己的条件筛选自己想要的数据包。
例1: 使用过滤器筛选 TCP的数据包
注意:筛选条件我们都使用小写就好了,大写的话会不识别。
例2:使用过滤器筛选arp 的数据包
例3:使用过滤器筛选udp的数据包
我们使用过滤器输入“udp”以筛选出udp报文。但是为什么输入udp之后出现那么多种协议呢?
原因就是 oicq 以及 dns 都是基于 udp 的传输层之上的协议
扩展: 客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。
不用经过三次握手,这样DNS服务器负载更低,响应更快。理论上说,客户端也可以指定向DNS
服务器查询时用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包。
例4:使用过滤器筛选 http 的数据包
例5:使用过滤器筛选 dns 的数据包
其实我们不仅可以对协议类型进行筛选,我们还有跟多的筛选条件,比如源地址目的地址等等。
例6:筛选源地址是192.168.2.16或目的地址是192.168.2.1
or
and
我们可以很直观看到结果
实战:使用WireShark对常用协议抓包并分析原理
协议分析的时候我们关闭混淆模式,避免一些干扰的数据包存在。
1、常用协议分析-ARP协议
地址解析协议(英语: Address Resolution Protocol,缩写:ARP)是一个通过解析网络层地址
来找寻数据链路层地址的网络传输协议,它在IPv4中极其重要。ARP是通过网络地址来定位MAC
地址。
随便双击一个
总结:我们可以看到到应答包补全了自己的MAC地址,目的地址和源地址做了替换
我们再来看两个数据包的请求和过程
192.168.2.16广播: 谁有192.168.2.1的MAC地址?
192.168.2.1应答: 192.168.2.1的MAC地址是xxXXXXXXXXXe
2、常用协议分析-ICMP协议
我们把之前的数据包清空,然后筛选ICMP协议的数据包
打开一个终端: ping yijincc.com -c 1
我们只发送一个 ping 包,方便我们分析发送完之后停止抓包即可
下面我们开始分析ICMP协议包
ICMP协议分析请求包
ICMP协议分析应答包
工作过程:
本机发送一个ICMP Echo Request的包
接受方返回一个ICMP Echo Reply,包含了接受到数据拷贝和一些其他指令
3、常用协议分析-TCP协议
清空数据包然后筛选tcp开始抓包
我们模拟一下tcp会话建立,那最简单的方式是什么呢?
收到 我们通过Xshell远程连接Kali Linux就会捕获到完整的TCP3次握手的链接。
tcp三次握手
到这里三次握手过程就结束了
图表显示
前面3个就是TCP建立链接的过程,后面的就是相互通信的过程了这个时候seq就会根据数据包的大小改变。
我们清空一下数据包来看一下断开链接是一个什么样的过程.
四次挥手断开连接 图表显示
我们把窗口拉到最下面只看4个数据包
过程: 我们在终端输入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状态并关闭本端的会话接口,释放相应资源。
4、常用协议分析-http协议
我们还是筛选TCP协议,因为HTTP是TCP的上层协议,所以我们过滤TCP的数据会包含HTTP
协议的数据包
注: curl 是一个在命令行下工作的文件传输工具,我们这里用来发送http请求
-Ⅰ大写的 i 表示仅返回头部信息。
我们可以看到我们抓到了TCP的3次握手4次断开
第4个和第6个是我们的 HTTP数据包
第一步:我们我们发送了一个HTTP的HEAD请求
第二步:服务器收到我们的请求返回了一个Seq/ACK进行确认
第三步:服务器将HTTP的头部信息返回给我们客户端状态码为200表示页面正常-第四步:客户端收
到服务器返回的头部信息向服务器发送Seq/ACK进行确认
发送完成之后客户端就会发送FIN/ACK来进行关闭链接的请求。
图表显示
实战: WireShark抓包解决服务器被黑上不了网
场景: 服务器被黑上不了网,可以ping通网关,但是不能上网。
模拟场景
修改主机TTL值为1,下面的方式是我们临时修改内核参数。
root@xuegod53:~# echo "1" > /proc/sys/net/ipv4/ip_default_ttle
拓展:
TTL :数据报文的生存周期。
默认linux操作系统值: 64,每经过一个路由节点,TTL值减1。TTL值为0时,说明目标地址
不可达并返回:Time to live exceeded
作用: 防止数据包,无限制在公网中转发。我们测试结果
我们可以看到提示我们Time to live exceeded这表示超过生存时间,
我们判断和目标之间经过多少个网络设备是根据目标返回给我们的TTL值来判断的,因为我们
发送的数据包是看不到的。
我们对比数据包发现返回我们数据包被丢弃的源地址变成了39.156.66.10,这证明了数据包在
网络中已经到达了下一个网络设备才被丢弃,由此我们还判断出我们的运营商网关地址为
39.156.66.10但是我们并没有到达目标主机。
我们恢复系统内核参数】
root@xuegod53:~# echo "64" > /proc/sys/net/ipv4/ip_default_ttl
目标返回给我们的TTL值为128,这表示我们的TTL才可以访问baidu.com
MTR可以检测我们到达目标网络之间的所有网络设备的网络质量,
kali 默认系统是没有安装MTR工具的我们手动安装一下
例:检测到达yijincc.com所有节点的通信质量
我们可以看到从我当前主机到目标主机之间经过多少跳