级别:★☆☆☆☆
标签:「Wireshark for mac」「iOS TCP抓包」「iOS UDP抓包」
做者: Xs·H
审校: QiShare团队php
在iOS应用开发过程当中,经过抓包调试服务接口的场景时常出现。Charles和Wireshark是我在iOS开发过程当中最经常使用的两款软件。html
接上篇iOS Charles抓包,Charles是很强大的网络请求抓包工具,经常使用于抓包HTTP/HTTPS请求。而做者在作IoT项目时,智能硬件配网协议是基于TCP/UDP或者蓝牙的,须要用Wireshark进行抓包调试。Wireshark官网git
本文基于做者在项目中抓包iPhone和智能硬件之间TCP/UDP通讯数据的经验来介绍Wireshark的使用方式。github
Wireshark是免费软件,能够从官网直接下载安装。安全
从非官方网站下载资源时要注意甄别安装包来源,谨防木马和病毒。bash
安装成功后,启动Wireshark,可看到本地接口列表界面。图示以下:微信
此时,要选择一个接口,双击后进入抓包界面。Ethernet:en0(以太网卡)和Wi-Fi:en1(无线网卡)是教经常使用的两个接口。而做者要捕捉的数据(iPhone和智能硬件之间的TCP/UDP通讯数据)不通过PC的网卡。因此,在抓包以前,须要先建立出来待捕捉的接口。网络
这里的虚拟网卡就是上述的待捕捉的接口。建立虚拟网卡的过程以下:多线程
将iPhone经过USB接口链接Mac,而后在终端上使用下述命令获取iPhone的UDID。app
$ system_profiler SPUSBDataType | grep "Serial Number:.*" | sed s#".*Serial Number: "##
decb66caf7012a7799c2c3edxxxxxxxx7f5a715e
复制代码
若是Mac上链接了多个iPhone,从Xcode菜单栏 -> Window -> Devices and Simulators
能够更方便地获取准确的UDID。图示以下:
$ ifconfig -l
lo0 gif0 stf0 XHC20 en0 en1 en2 en3 p2p0 awdl0 bridge0 utun0 en27
复制代码
$ rvictl -s decb66caf7012a7799c2c3edxxxxxxxx7f5a715e
Starting device decb66caf7012a7799c2c3edxxxxxxxx7f5a715e [SUCCEEDED] with interface rvi0
复制代码
可使用
rvictl -x [UDID]
命令在须要的时候去除网卡。
$ ifconfig -l
lo0 gif0 stf0 XHC20 en0 en1 en2 en3 p2p0 awdl0 bridge0 utun0 en27 rvi0
复制代码
在末尾多出的rvi0
就是为iPhone建立出来的虚拟网卡。使用rvi0
就能够抓包了。
打开Wireshark,本地接口列表界面中出现了rvi0
。图示以下:
双击rvi0
便可进入抓包界面。 若此时出现以下弹窗,则说明无权限访问该接口。
这时,退出Wireshark,而后在终端上使用下述命令从新打开Wireshark就能够了。
$ sudo /Applications/Wireshark.app/Contents/MacOS/Wireshark
Password:
复制代码
要对TCP/UDP进行抓包,首先须要了解Charles主界面。图示以下:
工具栏中包含一些功能按钮,能够控制开始抓包、中止抓包等。工具栏底部的输入框叫作显示过滤器,能够经过设定一些过滤条件,控制数据包列表栏的显示状况。
这部分显示抓到的请求列表(包列表),不一样类型的请求会以不一样的颜色表示。顶部的No.
、Time
、 Source
、 Destination
、 Protocol
、 Length
、Info
是单条请求的的属性,能够在菜单栏 -> 视图
中调整显示效果。
在数据包列表栏中点击某条数据,可在此区域内查看详情。
此区域展现包的原始数据,在数据包详情栏中显示的内容在此区域都能对应到byte级别的数据。
因为Wireshark捕捉通过网卡的全部数据,在稍复杂的网路环境中,数据包的数量会瞬间增长,达到难以阅读和难以查找目标数据包的状态。此时,使用Wireshark捕获过滤器和显示过滤器会颇有帮助。
启动Wireshark后,在本机接口列表页面能够看到捕获过滤器(Capture Filter)。图示以下:
在蓝色框内的过滤器输入框中,能够输入一些规则,来指明Wireshark只捕捉符合该规则的数据包。过滤规则示例以下:
// 只捕获HTTP/HTTPS数据
port 80 or port 443
// 只捕获制定host的数据
host 192.168.10.1
复制代码
显示过滤器(Display Filter)在抓包界面的工具栏底部(上面有介绍)。输入一些规则,能够从数据包列表栏过滤掉不符合该规则的数据包,当去掉规则时,被过滤掉的数据包会从新显示出来。过滤规则示例以下:
// 只显示TCP/UDP数据
tcp || udp
// 只显示HTTP/HTTPS数据
tcp.port == 80 || tcp.port == 443
// 只显示指定host的数据
ip.addr == 192.168.10.1
// 只显示指定端口的数据
tcp.port == 52360 || udp.port == 36025
复制代码
从Wireshark官方使用文档能够查看更多的过滤规则示例。
小编微信:可加并拉入《QiShare技术交流群》。
关注咱们的途径有:
QiShare(简书)
QiShare(掘金)
QiShare(知乎)
QiShare(GitHub)
QiShare(CocoaChina)
QiShare(StackOverflow)
QiShare(微信公众号)
推荐文章:
初探TCP
初探IP、UDP
iOS 多线程之线程安全
iOS 多线程之GCD
iOS 多线程之NSOperation
iOS 多线程之NSThread
奇舞周刊