初识 Wireshark

使用 Charles 介绍了在 MacOS 上面的使用 Charles 工具, 虽然 Charles 很不错, 但是其只能抓 HTTP/HTTPS 的包, 对 TCP、UDP 等其他协议的网络包, 爱莫能助。

今天给大家分享强大的网络抓包工具 Wireshark,算是初步认识一下这个工具,后续分享更多关于 Wireshark 的内容。

简介

Wireshark 是免费的,支持 Windows、MacOS 和 Linux,提供丰富的 GUI 交互,能分析所有的网络协议,并且是开源的。

掌握好 Wireshark,能对绝大部分的网络协议进行分析了,所以学习它的使用对你的工作不无裨益。

关于 Wireshark 本身 UI(展示的界面内容) 的部分不在本文的讨论范围内,更多关于 Wireshark 的介绍和特性,可以去 Wireshark 官网 查阅。

安装

我的 MacOS 版本:

点击 Wireshark下载地址, 可以去下载对应的平台版本。

注意: 之前的 Mac 系统版本可能需要安装 x11, 现在新系统不需要安装了.

抓 iOS 设备的数据包

想抓 iOS 设备的网络数据,需要让 iOS 设备数据通过 MacOS 才行,因为 Wireshark 是针对网口进行抓包的。

当然了,你的 iOS 设备不需要越狱.

通过 usb 连接 iOS 设备后,接下来创建远程虚拟接口,在终端执行下面命令:

1
rvictl -s 设备id(udid)

rvictl 即 Remote Virtual Interface Tool。它可以通过 iOS 设备的 UDID 创建一个虚拟网卡,然后通过这个虚拟网卡监听设备上所有的网络流量。

执行成功后,Mac 会出现一个对应的虚拟网络接口,名字是 rvi0(如果有多个 iOS 设备, 则累加,rvi1,rvi2…),如下图所示:

只要启动 Wireshark,监听 rvi0 接口就能抓到 iOS 设备的数据了。

关于获取 iOS 设备 ID(UDID),可以使用 Xcode, 在 Window/Devices and Simulators 中选择相应设备,右面设备信息的 identifier 里就是对应的 UDID. 也可以通过 iTunes 或者第三方工具如 iTools 获取.

你可以安装 ideviceinstaller 来查看设备 ID.

1
brew install ideviceinstaller

然后执行下面命令:

1
idevice_id -l

以抓取下面的一个 HTTP 请求为例,简单说明一下相关的知识。

GET 请求:

1
/news/detailV3.html?id=1279391&COMMON_ACCESS_TOKEN=(null)&COMMON_ACCESS_TOKEN_SECRET=(null)&_cT=IOS&_cV=3.1.3&_cA=PM

看返回结果,选中 Rsponse(200 OK) 右键, Follow/HTTP Stream,如图所示:

在弹出的窗口中就可以看到具体的响应内容,以及响应的 json 数据。

过滤器过滤

Wireshark 中显示过滤器会显示很多当前网络的数据包,如果你想看指定规则的数据包怎么办?

别担心,Wireshark 给我们提供了过滤功能,按照一定的过滤规则就可以达到你的目的。

1. 网络协议过滤

比如 TCP,只显示 TCP 协议,HTTP 只显示 HTTP 协议等。在过滤器输入框中直接输入协议名称即可,不区分大小写。

2. IP 地址过滤

如 ip.src == 192.168.1.102 显示源地址为 192.168.1.102
而 ip.dst == 192.168.1.102, 目标地址为 192.168.1.102

3. 端口过滤

tcp.port == 80, 端口为 80 的

tcp.srcport == 80, 只显示 TCP 协议的原端口为 80 的。

4. Http 模式过滤

http.request.method == “GET”,只显示 HTTP GET 方法的。

5. 结合逻辑运算符 AND/OR 组成复杂的表达式

AND/OR 也可以写成 && / ||

下面举几个常用的示例,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//源地址或者目标地址是192.168.1.103
ip.src == 192.168.1.103 or ip.dst == 192.168.1.103
//显示所有目标或源地址是192.168.1.1的数据包
ip.addr == 192.168.1.1
//显示目标地址是192.168.1.1的数据包
ip.dst == 192.168.1.1
//显示源地址是192.168.1.1的数据包
ip.src == 192.168.1.1
//tcp 连接端口为9101的数据包
tcp.port == 9101

更多的过滤规则可以去 官方手册CaptureFilters 查阅和学习。

美中不足

Wireshark 只能查看封包,而不能修改封包的内容,或者发送封包。

对于 HTTP、HTTPS 网络封包,Wireshark 都可以捕获, 但不能直接解密 HTTPS,所以想使用 Wireshark 来分析 HTTPS 包中的内容,需要去额外配置,较麻烦,后续研究再分享给大家。

所以建议大家,分析 HTTP/HTTPS 去使用各自平台上面的其他工具, 如 FiddlerCharles 等优秀的抓包工具。


扫码关注,你我就各多一个朋友~

坚持原创技术分享!