IOS怎么抓取网络请求包

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOS怎么抓取网络请求包相关的知识,希望对你有一定的参考价值。

参考技术A 好吧,苹果提供了命令行监控的方法,将iPhone连接到Mac电脑的USB,输入特定命令来监听iPhone的所有网络请求。 

请求的内容会写入到一个文件,读取该文件即可获取所有网络请求。 

而该文件需要特定工具才能打开,用WireShark,它再次派上了用场。

——————监控网络请求的步骤—————– 

1.将iPhone连接到Mac电脑 

2.从Xcode或者iTunes获得iPhone的UUID,一串32位的标示,类似0B6814B3-EB2F-5B85-929D-7C5C5SS8DB64 

3.命令行输入rvictl -s [你的手机UUID标示],打开Mac监听 

4.命令行输入sudo tcpdump -i rv0 -n -s 0 -w dumpFile.pcap tcp,开始向文件写入监控数据

结束监听时,ctrl+c关闭tcpdump进程。 

关闭Mac监听,命令是 rvictl -v [你的手机UUID标示]

——————步骤结束———————–

以下是苹果官方文档

ios Packet Tracing

iOS does not support packet tracing directly. However, if you’re developing for iOS you can take a packet trace of your app in a number of different ways:

If the problem you’re trying to debug occurs on Wi-Fi, you can put your iOS device on a test Wi-Fi network. See Wi-Fi Capture for details. 

If your app uses HTTP, you can configure your iOS device to use a debugging HTTP proxy (such as Charles HTTP Proxy). 

In iOS 5 and later you can use the remote virtual interface facility. 

Remote Virtual Interface 

iOS 5 added a remote virtual interface (RVI) facility that lets you use OS X packet trace programs to capture traces from an iOS device. The basic strategy is:

Connect your iOS device to your Mac via USB. 

Set up an RVI for that device. This creates a virtual network interface on your Mac that represents the iOS device’s networking stack. 

Run your OS X packet trace program, and point it at the RVI created in the previous step. 

To set up an RVI, you should run the rvictl tool as shown below.

# First get the current list of interfaces.# First get the current list of interfaces. ifconfig -l 

lo0 gif0 stf0 en0 en1 p2p0 fw0 ppp0 utun0 

# Then run the tool with the UDID of the device.# Then run the tool with the UDID of the device. rvictl -s 74bd53c647548234ddcef0ee3abee616005051ed

Starting device 74bd53c647548234ddcef0ee3abee616005051ed [SUCCEEDED]

# Get the list of interfaces again, and you can see the new virtual# Get the list of interfaces again, and you can see the new virtual # network interface, rvi0, added by the previous command. 

$ ifconfig -l 

lo0 gif0 stf0 en0 en1 p2p0 fw0 ppp0 utun0 rvi0 

Now that you know the name of the RVI, you can point your packet trace tool at it. For example, here’s how you might run tcpdump to take a packet trace from the RVI and write it to the file trace.pcap.

$ sudo tcpdump -i rvi0 -w trace.pcap 

tcpdump: WARNING: rvi0: That device doesn’t support promiscuous mode 

(BIOCPROMISC: Operation not supported on socket) 

tcpdump: WARNING: rvi0: no IPv4 address assigned 

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode 

listening on rvi0, link-type RAW (Raw IP), capture size 65535 bytes 

When you’re done you can remove the RVI with the following command.

$ rvictl -x 74bd53c647548234ddcef0ee3abee616005051ed

Stopping device 74bd53c647548234ddcef0ee3abee616005051ed [SUCCEEDED] 

Important: The RVI represents the entire networking stack of the iOS device; there’s no way to trace a specific interface on the device, or even learn which packets were transferred on which interface.

Charles抓包以及解决抓取HTTPS请求unknown的问题

参考技术A

在 Mac 下使用 Charles 工具进行抓包,然后抓取 HTTPS 请求时,出现 unknown,无法解析的情况如何处理呢?

请继续往下看,将会详细介绍一下整个过程...

过于简单,省略一万字...

包括电脑端和手机端,这也是抓取 HTTPS 请求的关键所在。

1. 电脑端

打开 Charles,然后在菜单栏选择 Help → SSL Proxying → Install Charles Root Certificate ,将证书安装至电脑,并打开 钥匙串访问

证书安装后,默认是 不被信任 的,所以我们需要将其设置为信任。

钥匙串 中找到该证书 Charles Proxy CA ,并设置为 始终信任 ,然后保存。

这样电脑端证书就安装完成了。

2. 手机端

同样在菜单栏选择 Help → SSL Proxying → Install Charles Root Certificate on a Mobile Device or Remote Browser ,将会有以下提示。

在手机打开: 设置 → Wi-Fi → 打开所连 WiFi → 设置 HTTP 代理 → 选择手动 ,接着将 IP 地址以及端口填写进去,然后存储即可。

输入过程中,服务器一栏 . 之间可能会自动插入空格,手动删除一下。

接着打开系统 Safari 浏览器 (其他浏览器可能无法唤起安装证书的弹窗),输入地址 chls.pro/ssl 打开页面,会自动唤起安装描述文件的弹窗,选择 允许

紧接着,前往: 设置 → 通用 → 描述文件 → 选择对应描述文件 → 安装

前往, 设置 → 通用 → 关于本机 → 证书信任设置(滑到屏幕最下面) → 将 Charles 证书勾选上 即可。(PS:我截图有两个是证书是两台不同的机器)

Charles 默认是 8888 ,不占用其他服务端口情况下,不修改问题也不大,根据实际情况自行调整。

这样我们就可以愉快地玩耍了

由于 Android 机型众多,各定制系统差别也不同,安装证书在不同 Android 版本也有限制,导致在使用 Charles 进行抓包时要比 iOS 难很多。

Android 7.0 之后默认不信任用户添加到系统的 CA 证书:

换句话说,就是对基于 SDK24 及以上的 APP 来说,即使你在手机上安装了抓包工具的证书也无法抓取 HTTPS 请求。

下面提供几个链接:

以上是关于IOS怎么抓取网络请求包的主要内容,如果未能解决你的问题,请参考以下文章

Charles抓包以及解决抓取HTTPS请求unknown的问题

现在为啥我使用fiddler4抓取iphone上开发版的小程序的https包点击时提示“网络请求失败”

如何监控手机网络请求?

如何通过wireshark 抓取 jquery的ajax请求数据包

如何抓取安卓App Http请求的数据包

详解Android/IOS平台下抓包工具使用以及抓取API接口