【发布时间】:2012-06-23 02:37:34
【问题描述】:
我正在尝试像 Firebug 一样监控从应用程序到我的服务器的调用。 我找不到在 iOS 模拟器或 xCode 中查看的方法。
有没有办法在不嗅探所有流量的情况下做到这一点? 如果没有,你会推荐什么工具?
【问题讨论】:
标签: xcode networking ios-simulator network-monitoring
我正在尝试像 Firebug 一样监控从应用程序到我的服务器的调用。 我找不到在 iOS 模拟器或 xCode 中查看的方法。
有没有办法在不嗅探所有流量的情况下做到这一点? 如果没有,你会推荐什么工具?
【问题讨论】:
标签: xcode networking ios-simulator network-monitoring
就我个人而言,我使用 Charles 来处理这类事情。
启用后,它将监控每个网络请求,显示扩展的请求详细信息,包括对 SSL 和各种请求/响应格式(如 JSON 等)的支持...
您还可以将其配置为仅嗅探对特定服务器的请求,而不是整个流量。
它是商业软件,但有试用版,恕我直言,它绝对是一个很棒的工具。
【讨论】:
如其他答案所建议的那样,如果您只想查看 HTTP/HTTPS 流量,那么中间人代理是一个很好的解决方案。 Burp Suite 很不错。不过配置起来可能会很痛苦。我不确定您将如何说服模拟器与之交谈。您可能必须将本地 Mac 上的代理设置为代理服务器实例才能拦截,因为模拟器将使用您本地 Mac 的环境。
我发现数据包嗅探的最佳解决方案(尽管它仅适用于实际 iOS 设备,而不适用于模拟器)是使用rvictl。 This blog post 写得很好。基本上你会这样做:
rvictl -s <iphone-uid-from-xcode-organizer>
然后你用 Wireshark(或你最喜欢的工具)嗅探它创建的界面,当你完成后关闭界面:
rvictl -x <iphone-uid-from-xcode-organizer>
这很好,因为如果你想对模拟器进行数据包嗅探,你也不得不涉足到本地 Mac 的流量,但是rvictl 创建了一个虚拟接口,只显示来自你的 iOS 设备的流量已插入您的 USB 端口。
【讨论】:
【讨论】:
在 Mac 上轻松运行的免费开源代理工具是mitmproxy。
该网站包含指向 Mac 二进制文件的链接,以及 Github 上的源代码。
文档包含一个非常有用的介绍,用于将证书加载到您的测试设备以查看 HTTPS 流量。
不像 Charles 那样 GUI-tastic,但它可以满足我的一切需求,而且它是免费的,并且可以维护。 好东西,如果您以前使用过一些命令行工具,那么非常简单。
更新:我刚刚在网站上注意到 mitmproxy 可作为自制软件安装。再简单不过了。
【讨论】:
Xcode 提供 CFNetwork 诊断日志。 Apple doc
要启用它,请在环境变量部分添加CFNETWORK_DIAGNOSTICS=3:
这将显示来自应用程序的请求及其标头和正文。请注意,OS_ACTIVITY_MODE 必须设置为 enable,如图所示。否则控制台上不会显示任何输出。
【讨论】:
OS_ACTIVITY_MODE 不再需要根据最新文档:developer.apple.com/documentation/network/…。还需要在你的 Mac 上使用单独的控制台应用程序,而不是在 Xcode 的调试控制台中查找消息。来自文档:“确保从主控制台窗口左侧的源列表中选择您的 iOS 设备(如果源列表不可见,请选择查看 > 显示源)。”从那里您可以添加过滤器,例如您的进程、cfnetwork、HTTPProtocol: request 等(右键单击一行或使用搜索框)
这似乎是最近添加的。在模拟器上点击command+control+z会弹出调试菜单。在该菜单中,单击Inspect。检查将显示选项卡。单击网络选项卡,这将显示正在发出的所有网络请求。
【讨论】:
如果你有cable连接和Mac,那么有一个简单而强大的方法:
安装免费的 Wireshark,确保它可以捕获设备(并且您需要在每次计算机重新启动后进行此操作!):
sudo chmod 644 /dev/bpf*
现在与 wifi 共享您的网络。系统偏好设置 > 共享 > Internet 共享。检查您是否有“共享来自:以太网的连接”并使用:Wi-Fi。您可能还想配置一些 wifi 安全性,它不会干扰您的数据监控。
将手机连接到新创建的网络。我在这里经常需要几次尝试。如果手机不想连接,请关闭Mac的wifi,然后重复上面的步骤2并耐心等待。
启动 Wireshark 使用 Wireshark 捕获您的无线接口,它可能是“en1”。过滤您需要的 IP 地址和/或端口。当您找到一个有趣的包时,选择它,右键单击(上下文菜单)> 关注 TCP 流,您会看到请求和答案的漂亮文本表示。
什么是最好的:同样的技巧也适用于 Android!
【讨论】:
Telerik Fiddler 是个不错的选择
http://www.telerik.com/blogs/using-fiddler-with-apple-ios-devices
【讨论】:
从Xcode 13 开始,您可以使用 Xcode Instruments -> Network instrument 来监控所有网络流量及其所有详细信息。你需要一台运行 iOS 15+ 的物理设备
更多详情请参阅 WWDC 2021 视频中的 Analyze Network Traffic。
【讨论】:
【讨论】:
您也可以使用这个open source library called Wormholy(由我制作)。
您只需将它集成到您的项目中(无需代码),就是这样,您将能够监控您应用的所有 API 请求,也可以在真实设备上。
而且您不需要像 Charles 那样管理证书。这一切都靠魔法!
【讨论】:
NSURLSession 的流量
FLEX 是监控 iOS 应用程序网络流量的绝佳工具。
单击上面屏幕截图中列出的任何请求时,我将被重定向到另一个屏幕,在该屏幕上我可以看到有关该请求的更多详细信息。
但是,我有一个用例,我正在开发的应用程序会将用户重定向到 Safari。我也想监控 Safari 中的网络流量,但 FLEX 只能监控来自您的 iOS 应用程序的流量,而不是来自任何其他应用程序的流量(在撰写此答案时)。
然后我切换到Proxyman 来监控来自 iOS 模拟器的网络流量。
【讨论】:
如果您习惯了 chrome 检查器工具,一个很好的解决方案是 Pony 调试器:https://github.com/square/PonyDebugger
设置起来有点麻烦,但是一旦设置好就可以了。请务必使用 Safari 而不是 Chrome 来使用它。
【讨论】:
我使用 netfox。它非常易于使用和集成。您可以在模拟器和设备上使用它。它显示了所有的请求和响应。它支持 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。
希望能帮助您捕获日志。
【讨论】: