我正在尝试像 Firebug 一样监控从应用程序到我的服务器的调用。我找不到在 iOS 模拟器或 xCode 中查看的方法。
有没有办法在不嗅探所有流量的情况下做到这一点?如果没有,你会推荐什么工具?
我正在尝试像 Firebug 一样监控从应用程序到我的服务器的调用。我找不到在 iOS 模拟器或 xCode 中查看的方法。
有没有办法在不嗅探所有流量的情况下做到这一点?如果没有,你会推荐什么工具?
就个人而言,我使用查尔斯来做那种事情。
启用后,它将监控每个网络请求,显示扩展请求详细信息,包括对 SSL 和各种请求/响应格式(如 JSON 等)的支持...
您还可以将其配置为仅嗅探对特定服务器的请求,而不是整个流量。
它是商业软件,但有试用版,恕我直言,它绝对是一个很棒的工具。
如果您只想查看 HTTP/HTTPS 流量,中间人代理(如其他答案所建议的)是一个很好的解决方案。Burp Suite很不错。不过配置起来可能会很痛苦。我不确定您将如何说服模拟器与之交谈。您可能必须将本地 Mac 上的代理设置为代理服务器实例才能拦截,因为模拟器将使用您本地 Mac 的环境。
我发现数据包嗅探的最佳解决方案(尽管它仅适用于实际的 iOS 设备,而不适用于模拟器)是使用rvictl
. 这篇博文有一篇不错的文章。基本上你这样做:
rvictl -s <iphone-uid-from-xcode-organizer>
然后,您使用 Wireshark(或您最喜欢的工具)嗅探它创建的界面,完成后使用以下命令关闭界面:
rvictl -x <iphone-uid-from-xcode-organizer>
这很好,因为如果你想对模拟器进行数据包嗅探,你也必须涉足到本地 Mac 的流量,但rvictl
会创建一个虚拟界面,只显示你插入 USB 的 iOS 设备的流量港口。
在 Mac 上轻松运行的免费开源代理工具是mitmproxy。
该网站包含指向 Mac 二进制文件的链接,以及 Github 上的源代码。
该文档包含一个非常有用的介绍,用于将证书加载到您的测试设备以查看 HTTPS 流量。
不像 Charles 那样 GUI-tastic,但它可以满足我的一切需求,而且它是免费和维护的。好东西,如果您以前使用过一些命令行工具,那么非常简单。
更新:我刚刚在网站上注意到 mitmproxy 可以作为自制软件安装。再简单不过了。
Xcode 提供 CFNetwork 诊断日志。苹果文档
要启用它,CFNETWORK_DIAGNOSTICS=3
请在环境变量部分添加:
这将显示来自应用程序的请求及其标头和正文。注意OS_ACTIVITY_MODE
一定要设置enable
成如图。否则控制台上不会显示任何输出。
似乎这可能是最近添加的。在模拟器上点击command
++会弹出调试菜单。从该菜单中,单击。检查将显示选项卡。单击网络选项卡,这将显示正在发出的所有网络请求。control
z
Inspect
如果您有电缆连接和 Mac,那么有一个简单而强大的方法:
安装免费的 Wireshark,确保它可以捕获设备(并且您需要在每次计算机重新启动后执行此操作!):
须藤 chmod 644 /dev/bpf*
现在与 wifi 共享您的网络。系统偏好设置 > 共享 > Internet 共享。检查您是否有“共享来自:以太网的连接”并使用:Wi-Fi。您可能还想配置一些 wifi 安全性,它不会干扰您的数据监控。
将手机连接到新创建的网络。我在这里经常需要几次尝试。如果手机不想连接,请关闭Mac的wifi,然后重复上面的步骤2并耐心等待。
启动 Wireshark 用 Wireshark 捕获你的无线接口,它可能是“en1”。过滤您需要的 IP 地址和/或端口。当你找到一个有趣的包时,选择它,右键单击(上下文菜单)> Follow TCP Stream,你会看到请求和答案的漂亮文本表示。
什么是最好的:同样的技巧也适用于 Android!
Telerik Fiddler 是一个不错的选择
http://www.telerik.com/blogs/using-fiddler-with-apple-ios-devices
从Xcode 13
您可以使用 Xcode Instruments -> Network instrument 来监控所有网络流量及其所有详细信息。您需要一台在 macOS 12+ 上运行 iOS 15+ 的物理设备
有关更多详细信息,请参阅 WWDC 2021 视频中的分析网络流量。
您还可以使用这个名为 Wormholy 的开源库(由我制作)。
您只需将它集成到您的项目中(无需代码),就是这样,您将能够监控您的应用程序的所有 API 请求,也在真实设备上。
而且您不需要像 Charles 那样管理证书。这一切都靠魔法!
FLEX是监控 iOS 应用程序网络流量的绝佳工具。
单击上面屏幕截图中列出的任何请求时,我将被重定向到另一个屏幕,在那里我可以看到有关该请求的更多详细信息。
但是,我有一个用例,我正在开发的应用程序会将用户重定向到 Safari。我也想监控 Safari 中的网络流量,但 FLEX 只能监控来自您的 iOS 应用程序的流量,而不是来自任何其他应用程序的流量(在撰写此答案时)。
然后我切换到Proxyman来监控来自 iOS 模拟器的网络流量。
如果您习惯使用 chrome 检查器工具,一个很好的解决方案是 Pony 调试器:https ://github.com/square/PonyDebugger
设置起来有点痛苦,但是一旦你完成它就会很好地工作。请务必使用 Safari 而不是 Chrome 来使用它。
我用网狐。它非常易于使用和集成。您可以在模拟器和设备上使用它。它显示了所有的请求和响应。它支持 JSON、XML、HTML、图像和其他类型的响应。您可以通过 IOS 默认共享格式(Gmail、WhatsApp、电子邮件、slack、短信等)共享请求、响应和完整日志
你可以在 GitHub 上查看:https ://github.com/kasketis/netfox
Netfox 可以快速查看您的 iOS 或 OSX 应用程序执行的所有已执行网络请求。它抓取所有请求 - 当然是您的请求,来自 3rd 方库(例如 AFNetworking、Alamofire 或其他)、UIWebViews 等的请求
您可以尝试使用https://github.com/BugBlock/BugBlock-iOS这是我创建的一个小工具,所以您需要的一切是:
import BugBlock
然后
var config = BBConfiguration()
config.consoleLoggingEnabled = false
config.serverLoggingEnabled = true
config.crashReportingEnabled = true
BBLog.start(appId: "SDK key", configuration: config)
并设置网络拦截器
let conf = URLSessionConfiguration.default
BBLog.networkLogging(with: conf)
let session = URLSession(configuration: conf)
然后session
在您的请求中使用。希望可以帮助您捕获日志。