如何监控从iOS模拟器进行的网络调用

Mad*_*het 103 networking xcode network-monitoring ios-simulator

我试图像Firebug一样监视从应用程序到我的服务器的调用.我找不到在iOS模拟器或xCode中查看的方法.

有没有办法在不嗅探所有流量的情况下做到这一点?如果不是,您会建议使用什么工具?

Mac*_*ade 80

就个人而言,我使用查尔斯那种东西.
启用后,它将监视每个网络请求,显示扩展的请求详细信息,包括对SSL的支持和各种请求/响应格式,如JSON等...

您还可以将其配置为仅嗅探对特定服务器的请求,而不是整个流量.

这是商业软件,但有一个试验,恕我直言,它绝对是一个伟大的工具.

  • 当您的服务器受到TLS保护时,它不容易工作. (3认同)
  • 非常易于使用和配置,并且完全符合我的要求,谢谢! (2认同)

And*_*ndy 28

使用内置网络活动监视仪器.

  • 谢谢!我会玩这个但是初看起来我找不到一种方法来查看内容和内容(请求标题+内容以及Firebug中的响应或Chrome/Safari上的等效内容).也许它在某个地方,我会继续挖掘. (11认同)
  • 在XCode 8上,它说该仪器不支持IOS模拟器平台 (9认同)
  • @Marc ..这只适用于设备..不适用于模拟器. (9认同)
  • 谢谢,听起来不错,但我找不到它的位置(对不起这样的初学者,但我两天前得到了我的第一台Mac ......). (4认同)
  • 网络活动监视工具是否允许读取http响应?我无法看到如何使用它来向下钻取 (2认同)

mpo*_*llo 24

如果您只想查看HTTP/HTTPS流量,那么像其他答案所建议的中间人代理是一个很好的解决方案.Burp套房非常好.但是,配置可能会很痛苦.我不确定你如何说服模拟器与之交谈.您可能必须将本地Mac上的代理设置为代理服务器的实例才能拦截,因为模拟器将使用您本地的Mac环境.

数据包嗅探的最佳解决方案(虽然它只适用于实际的 iOS设备,而不是模拟器)我发现是使用rvictl.这篇博文有一篇很好的文章.基本上你做:

rvictl -s <iphone-uid-from-xcode-organizer>
Run Code Online (Sandbox Code Playgroud)

然后你用Wireshark(或你喜欢的工具)嗅探它创建的界面,当你完成后关闭界面:

rvictl -x <iphone-uid-from-xcode-organizer>
Run Code Online (Sandbox Code Playgroud)

这是不错的,因为如果你想分组嗅探模拟器,你不必通过交通涉水到本地的Mac为好,但rvictl创建一个虚拟接口,只显示你从iOS设备你插入到您的USB流量港口.


gif*_*iff 18

一个可以在Mac上轻松运行的免费开源代理工具是mitmproxy.

该网站包含Mac二进制文件的链接,以及Github上的源代码.

这些文档包含一个非常有用的介绍,可以将证书加载到您的测试设备中以查看HTTPS流量.

不像查尔斯那样具有图形用户界面,但它可以完成我需要的一切,并且可以自由维护.好的东西,如果你之前使用过一些命令行工具,那就很简单了.

更新:我刚刚在网站上注意到mitmproxy可以作为自制软件安装.不可能更容易.


JAH*_*lia 12

Xcode 13您开始,您可以使用 Xcode Instruments -> Network Instruments 监控所有网络流量及其所有详细信息。您需要一台在 macOS 12+ 上运行 iOS 15+ 的物理设备

更多详细信息,请参阅WWDC 2021 视频中的分析网络流量

  • 问题明确询问如何在使用模拟器而不是物理设备时监视网络流量。 (2认同)

And*_*nes 8

最近,我发现了一个git repo,它很容易。

你可以试试。

这是一个应用程序的屏幕截图: 在此处输入图片说明

最好的祝福。


Gee*_*eek 7

要监控 https 请求,您基本上需要遵循两个主要步骤:

\n
\n

如果您只需要分步指南,请跳至最后的 TLDR。

\n
\n
\n
    \n
  1. 设置中间人代理(如 Requestly、Charles 或 HTTP 工具包)并开始向其发送流量
  2. \n
\n

您可以使用监听所有系统\xe2\x80\x99s 流量的工具,但根据我的经验,您最终会得到太多日志,而您不知道如何导航和过滤掉这些日志。

\n

更好(也更明显)的方法是仅拦截和监视来自 iOS 模拟器的流量。

\n

您可以通过编辑 Xcode 项目\xe2\x80\x99s 架构来完成此操作

\n

编辑 Xcode 架构

\n

并定义两个变量http_proxy\nandhttps_proxy

\n

HTTP代理环境变量

\n

适当设置这些以将所有流量发送到您的代理。他们中的大多数人总是提到其代理运行的 IP 和端口。

\n

如果您的应用程序不使用加密(它可能会这样做),这就是您需要做的所有事情,在这种情况下,您还需要处理加密

\n
\n
    \n
  1. 使用您的 proxy\xe2\x80\x99s 自签名证书来加密请求。然后代理能够解密并读取请求 \xe2\x80\x94 的内容,从而允许您正确调试和监视应用程序\xe2\x80\x99s 流量,
  2. \n
\n

在 iOS 模拟器中下载代理工具的自签名根证书。大多数代理工具都提供一个http端点,以便在配置代理后可以轻松地将其添加到模拟器中。\n例如,chls.pro/sslproxy.man/sslrequestly.io/ssl

\n

在 iOS 上,此证书旨在创建一个自定义配置文件,将 proxy\xe2\x80\x99s 证书添加到模拟器\xe2\x80\x99s 证书链中。

\n

要在下载后安装配置文件,请转至Settings > General > Device Management

\n

安装自定义配置文件

\n

在这里您将看到下载的配置文件的详细信息以及安装它的选项。

\n
\n

完成后,您需要为新添加的证书启用信任。

\n

为此,请转至Settings > About > Certificate Trust Settings并启用对下载的证书的信任

\n

信任自定义配置文件

\n

现在您应该能够监控您的 http 和 https 流量,而 iOS 不会抱怨正在发生恶意事件。

\n

免责声明和 TLDR:我积极维护Requestly 桌面应用程序,这里\xe2\x80\x99s 是使用 Requestly \xe2\x80\x94 设置 iOS 模拟器监控的简短分步指南https://docs.requestly.io/指南/调试-https-traffic-in-ios-simulator

\n


Eva*_*van 6

Xcode提供CFNetwork诊断日志记录。苹果文件

要启用它,请添加CFNETWORK_DIAGNOSTICS=3“环境变量”部分:

在此处输入图片说明

这将显示带有标题和正文的来自应用程序的请求。注意,OS_ACTIVITY_MODE必须将其设置为enable如下所示。否则,控制台上不会显示任何输出。

  • 根据最新文档,不再需要“OS_ACTIVITY_MODE”:https://developer.apple.com/documentation/network/debugging_https_problems_with_cfnetwork_diagnostic_logging。还需要在 Mac 上使用单独的控制台应用程序,而不是在 Xcode 的调试控制台中查找消息。来自文档:“确保从主控制台窗口左侧的源列表中选择您的 iOS 设备(如果源列表不可见,请选择“视图”&gt;“显示源”)。” 从那里您可以添加过滤器,例如您的进程、cfnetwork、“HTTPProtocol:request”等(右键单击一行或使用搜索框) (5认同)

kyo*_*kyo 5

Wireshark它

选择您的界面

在此处输入图片说明

添加filter启动capture

在此处输入图片说明


测试

单击会触发 GET/POST/PUT/DELETE 请求的任何操作或按钮

你会在wireshark中看到它

在此处输入图片说明

如果您想了解有关某个特定数据包的更多详细信息,只需选择它并点击Follow > HTTP Stream 即可

在此处输入图片说明

希望这对其他人有帮助!!

  • 如何知道请求是 HTTPS(而不是 HTTP)的更多详细信息? (2认同)

小智 5

看来这可能是最近添加的。在模拟器上点击command++会弹出调试菜单。从该菜单中,单击。检查将显示选项卡。单击网络选项卡,这将显示正在发出的所有网络请求。controlzInspect

  • 你所说的最近到底是什么意思,请提供你的xcode版本。 (2认同)