1.简介
前边已经介绍过两款抓包工具,应该是够用了,也能够处理在日常工作中遇到的问题了,但是还是有人留言让宏哥要讲解讲解Wireshark这一款抓包工具,说实话宏哥之前也没有用过这款工具,只能边研究边分享。换句话说就是现学现卖,希望大家不要介意,宏哥这里的分享仅供你参考学习,有错误的地方也欢迎你指出。你自己也可以深入的研究一下。
2.软件介绍
Wireshark(前称Ethereal)是一款免费开源的网络嗅探抓包工具,世界上最流行的网络协议分析器!网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark网络抓包工具使用WinPCAP作为接口,直接与网卡进行数据报文交换,可以实时检测网络通讯数据,检测其抓取的网络通讯数据快照文件,通过图形界面浏览这些数据,可以查看网络通讯数据包中每一层的详细内容。它的强大特性:例如包含有强显示过滤器语言和查看TCP会话重构流的能力,支持几百种协议和流媒体类型。
网络封包分析软件的功能可想像成 "电工技师使用电表来量测电流、电压、电阻" 的工作 - 只是将场景移植到网络上,并将电线替换成网络线。在过去,网络封包分析软件是非常昂贵的,或是专门属于营利用的软件。Ethereal的出现改变了这一切。在GNUGPL通用许可证的保障范围底下,使用者可以以免费的代价取得软件与其源代码,并拥有针对其源代码修改及客制化的权利。Ethereal是目前全世界最广泛的网络封包分析软件之一。
Wireshark 在网络排障中使用非常频繁,显示了网络模型中的第 2 层到第 5 层(链路层、网络层、传输层、应用层),不管是网络工程师、网络安全工程师、黑客、软件开发工程师,平时都会用到Wireshark。
3.WireShark简史
1997年,Gerald Combs 需要一个工具追踪网络问题,并且想学习网络知识。所以他开始开发Ethereal (Wireshark项目以前的名称) 以解决自己的需求。
1998年,Ethreal0.2.0版诞生了。此后不久,越来越多的人发现了它的潜力,并为其提供了底层分析。
Wireshark 是一款免费开源的数据包嗅探器/分析器,可用于捕获网络上的数据包。Wireshark 最初的版本叫做 Ethereal,由 Gerald Combs 于1998年发布,Wireshark 软件和官网上都可以看到他的名字排在首位:
2006年5月,Gerald Combs前往CACE Technologies工作,但是他没能拿到 Ethereal 的商标权。为了保证项目成功运行下去,Combs 和他的开发团队在 2006 年年中将这个项目重新命名为 Wireshark。
随着 Combs 和其他贡献者在接下来十几年内持续维护 Wireshark 的代码并发布新版本,Wireshark 已经成为世界上最流行的数据包分析/嗅探软件之一。
上述的 Wireshark 历史在网络上很容易查到,但是这些资料并未提及 Combs 为何要将该软件取名为 Wireshark(如果有读者能找到请在评论区指出)。
不过官网上有这样一个问题可以参考:
这个回答中的 carcharodon 无疑让人想起了最有名的鲨鱼——大白鲨 (Carcharodon carcharias)。大家都知道鲨鱼具有极其灵敏的嗅觉,能在几公里外嗅到受伤的猎物,用 shark来命名数据包嗅探器真是再合适不过了。
连 Wireshark 图标都是鲨鱼鳍的形状,如下图所示:
2008年,在经过了十年的发展后,Wireshark发布了1.0版本。
4.WireShark可以做什么
简而言之,WireShark主要作用就是可以抓取各种端口的报文,包括有线网口、无线网口、USB口、LoopBack口等等,从而就可以很方便地进行协议学习、网络分析、系统排错等后续任务。
支持实时捕获数据并保存为pcap文件
支持从已经捕获的数据包中读取数据;
支持超过1000种标准/专用协议解析
支持创建插件解析私有协议;
支持使用捕获和显示过滤器细化数据;
支持TLS协议解密(设置比较复杂,不如使用charles/burp/fidder方便)
上边说了一堆,换句话主要就是三点:
①分析网络底层协议,
②解决网络故障问题,
③找寻网络安全问题。
5.Wireshark不能做的
为了安全考虑,wireshark只能查看封包,而不能修改封包的内容,或者发送封包。
不支持编辑修改数据包(需要编辑数据包建议使用 WireEdit)
不支持入侵/检测异常流量
6.Wireshark VS Fiddler
Fiddler是在windows上运行的程序,专门用来捕获HTTP,HTTPS的。
wireshark能获取HTTP,也能获取HTTPS,但是不能解密HTTPS,所以wireshark看不懂HTTPS中的内容。
7.同类的其他工具
1.微软的network monitor
2.Sniffer
3.Omnipeek
4.Fiddler
5.Httpwatch
6.科来网络分析系统
8.什么人会用到wireshark
1. 网络管理员会使用wireshark来检查网络问题
2. 软件测试工程师使用wireshark抓包,来分析自己测试的软件
3. 从事socket编程的工程师会用wireshark来调试
4. IT运维工程师
5.网络工程师
6.安全工程师
7.听说,华为,中兴的大部分工程师都会用到wireshark。
总之跟网络相关的东西,都可能会用到wireshark。
9.平台支持
Wireshark可以在以下平台运行:
①Windows
②MacOS
③Linux/Unix
10.相关网址
1.官网:https://www.wireshark.org/
2.书籍:Chappell University | Wireshark Training
3.维基文档:Home - Wireshark Wiki
11.Wireshark抓包原理
Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。Wireshark使用的环境大致分为两种,一种是电脑直连网络的单机环境,另外一种就是应用比较多的网络环境,即连接交换机的情况。
「单机情况」下,Wireshark直接抓取本机网卡的网络流量;
「交换机情况」下,Wireshark通过端口镜像、ARP欺骗等方式获取局域网中的网络流量。
端口镜像:利用交换机的接口,将局域网的网络流量转发到指定电脑的网卡上。
ARP欺骗:交换机根据MAC地址转发数据,伪装其他终端的MAC地址,从而获取局域网的网络流量。
抓包原理分为网络原理和底层原理1.网络原理: 1)本机环境-直接抓本机网卡进出的流量:直接在终端安装ws,然后ws抓本机网卡的与互联网通信的流量。 2)集线器环境(老网络)-集线器:向其他所有端口都会泛洪,抓整个局域网里面的包。
11.1网络抓包原理
网络中不论传输什么,最终通过物理介质发送的都是二进制,类似于0101的Bit流。纯文本(字符串)中文通常采用UTF-8编码,英文用ASCII编码;非纯文本音频、视频、图片、压缩包等按不同编码封装好,转换成二进制传输。在IP网络中,通过Wireshark抓包,获取的原始数据都是二进制。
哪种网络情况下能够抓取到包呢?下面结合网络原理讲解。网络抓包主要存在三种情况:本机环境、集线器环境和交换机环境。
11.1.1本机环境
本机环境直接抓包本机网卡进出的流量。Wireshark会绑定我们的网卡,不需要借助第三方设备(交换机、集线路由器)就能抓取我们的网络通信流量,这是最基本的抓包方式。即直接抓取进出本机网卡的流量包。这种情况下,wireshark会绑定本机的一块网卡。
11.1.2集线器环境
集线器环境可以做流量防洪,同一冲突域。集线器的英文是“Hub”,“Hub”是“中心”的意思,集线器的主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。它工作于OSI参考模型第一层,即“物理层”。
假设三台电脑通信,PC1处安装Wireshark,当PC2、PC3发送数据包到集线器网络里面(冲突域或广播域),由于集线器是物理层产品,不能识别MAC地址、IP地址,它会将接收包往其他所有接口泛洪,此时Wireshark就能抓到从同一个集线器其他电脑发过来的数据包,即局域网中的数据包。这是一种典型的老网络做法,现在基本淘汰。
用于抓取流量泛洪,冲突域内的数据包,即整个局域网的数据包。
11.1.3交换机环境
交换机环境是更加常见的方式,包括端口镜像、ARP欺骗、MAC泛洪。
11.1.3.1端口镜像
交换机是一种数据链路层甚至网络层的产品,它的转包接包严格按照交换机上的MAC地址表通信。所以正常情况下,PC2和PC3通信流量是很难流到PC1的网卡上。当PC2和PC3通信时,PC1是无法通过Wireshark抓到包。但是我们可以在交换机端口做SAPN端口镜像操作,它会将其他两个口的流量复制一份到PC1处,PC1的网卡和Wireshark设置为混插模式,此时就能进行抓包。该模式常用于很多付费的流量分析软件。这种方式下,交换机严格按照tenlnet表和mac地址表进行转发数据包。当pc2和pc3通信的时候,默认是pc1是无法抓取数据包的,但是可以通过在交换机上设置策略,即端口镜像。这样Pc2和Pc3通信的数据包就被复制一份到连接pc2的那个交换机端口,这样pc2就可以抓取到Pc2和Pc3的通信数据包了。
11.1.3.2ARP欺骗
假设我们没有权限在交换机上做端口镜像技术,因为有MAC地址表,又想获取整个局域网中的流量,窃取到PC2、PC3上的流量。这可以通过著名的ARP攻击软件Cain&Abel实现,其流程是:
- 首先,PC2发送ARP请求广播包,交换机收到包之后会发给PC1和PC3。
- PC1和PC3接收到,正常情况下PC1会丢弃该包,因为询问的是PC3,但ARP欺骗会回复“我是IP3,对应地址为MAC1”,这就是典型的ARP欺骗或ARP病毒。
- 最后PC2会将流量封装成底层的MAC1回复过去。如果PC3和PC1都回应,但APR有个特性叫后到优先,PC1会做一个错误的绑定,将数据包发到MAC1,从而导致PC2和PC3的通信流量都会经过PC1,这也是典型的流量劫持、局域网攻击。
步骤如下:
(1)PC2想和PC3通信,故而向交换机发送广播
(2)正常情况下PC1会将此包丢弃掉(因为要找的不是它),但是这里的PC1会进行ARP欺骗,告诉PC2它就是PC2要找的PC3
(3)因为ARP后到优先的特性,PC2很大可能会认为PC1的MAC地址是自己要找的PC3
(4)就这样,PC2和PC3的通信就变成了PC2和PC1的通信了。
(5)至于后续PC1要不要把数据(可能被修改的数据)交给PC3,那完全取决于PC1的心情。
以上便是局域网ARP攻击的典型情况。
11.1.3.3MAC泛洪
通过工具泛洪带来大量垃圾包,产生大量MAC地址,此时交换机MAC地址表会变为右边这张表(爆表),MAC2和MAC3被挤出了MAC地址表。一旦这种MAC地址被挤出MAC地址表,按照交换机原理,如果收到的数据包是未知,它会对外泛洪,此时PC2和PC3对外流量泛洪。
这种情况下,PC1没有端口镜像的权限,所以它不能直接截取全网的流量,那么该怎么做呢?
(1)PC1发送大量垃圾包,这里产生了大量的MAC地址,导致MAC表爆表
(2)PC2和PC3发出的数据找不到目的地址就会进行全网泛洪,被PC1截取全网流量
11.2底层原理
那么,抓包的底层架构是怎样的?下面开始讲解Wireshark的底层原理。
底层原理:wireshark底层抓包工具。
12.wireshark整体架构
Wireshark包括5层架构:
最底层Win-/libpcap:wireshark底层驱动软件,Wireshark抓包时依赖的库文件(驱动文件、库文件)
Capture:抓包引擎,利用libpcap/WinPcap底层抓取网络数据包,libpcap/WinPcap提供了通用的抓包接口,能从不同类型的网络接口(包括以太网、令牌环网、ATM网等)获取数据包
Wiretap:将抓来的二进制数据转换成需要的格式文件,此时获取的是一些比特流,通过Wiretap(格式支持引擎)能从抓包文件中读取数据包,支持多种文件格式
Core:核心引擎,通过函数调用将其他模块连接在一起,起到联动调用的作用,Epan(包分析引擎涉):Protocol-Tree(保存数据包的协议信息,协议结构采用树形结构,解析协议报文时只需从根节点通过函数句柄依次调用各层解析函数即可)、Dissectors(各种协议解码器,支持700多种协议解析,解码器能识别出协议字段,并显示出字段值,Wireshark采用协议树的形式对数据流量的各层次协议逐层处理)、Plugins(一些协议解码器以插件形式实现,源码在plugins目录)、Display-Filters(显示过滤引擎,源码在epan/dfilter目录)。
GTK1/2:图形处理工具,处理用户的输入输出显示,最终存储至Harddisk硬盘中。
PS:了解基本的原理知识挺重要的,尤其为后续。
13.功能模块
模块名 | 功能 | 源码子目录 |
GTK/Qt | 处理所有的用户输入/输出(所有的窗口,对话框等等) | /ui |
Core | 主要的"粘合代码"(glue code),它把其他的块组合到一起 | / |
Epan (Ethereal Packet Analyzer) | 协议树(Protocol-Tree) - 保存捕获文件的协议信息数据 | /epan |
解析器(Dissectors) - 多种协议的解析器 | /epan/dissectors | |
插件(Plugins) - 一些用插件实现的协议解析器 | /plugins | |
显示过滤器(Display-Filters) - 显示过滤器引擎 | /epan/dfilter | |
Wiretap | wiretap库用于读/写libpcap格式或者其他文件格式的捕获文件 | /wiretap |
Capture | 抓包引擎相关接口 | / |
Dumpcap | 抓包引擎. 这是唯一需要提升权限来执行的部 | / |
WinPcap/libpcap | (不是Wireshark包的一部分) - 依赖于平台的包捕获库,包含捕获过滤器引擎.这就是我们为什么有不同的显示和捕获 两套过滤语法的原因 - 因为用了两种不同的过滤引擎 | - |
14.WireShark代码流程图
15.小结
好了,到此宏哥就将Wireshark工具的前世今生基本上全都讲解和分享完了,今天时间也不早了,就到这里!感谢您耐心的阅读~~
每天学习一点,今后必成大神-
往期推荐(由于跳转参数丢失了,所有建议选中要访问的右键,在新标签页中打开链接即可访问):
Appium自动化系列,耗时80天打造的从搭建环境到实际应用精品教程测试
Python接口自动化测试教程,熬夜87天整理出这一份上万字的超全学习指南
Python+Selenium自动化系列,通宵700天从无到有搭建一个自动化测试框架
Java+Selenium自动化系列,仿照Python趁热打铁呕心沥血317天搭建价值好几K的自动化测试框架
Jmeter工具从基础->进阶->高级,费时2年多整理出这一份全网超详细的入门到精通教程
Fiddler工具从基础->进阶->高级,费时100多天吐血整理出这一份全网超详细的入门到精通教程
Pycharm工具基础使用教程