我们正在寻找一种类似 Wireshark 的工具,用于在与第 3 方合作之前在 iPhone 上测试第 3 方应用程序。有什么建议么?
13 回答
如果您只想查看 HTTP/HTTPS 流量,中间人代理(如其他答案所建议的)是一个很好的解决方案。
我发现数据包嗅探的最佳解决方案(尽管它仅适用于实际的 iOS 设备,而不适用于模拟器)是使用rvictl
. 这篇博文有一篇不错的文章。基本上你这样做:
rvictl -s <iphone-uid-from-xcode-organizer>
然后,您使用 Wireshark(或您最喜欢的工具)嗅探它创建的界面,完成后使用以下命令关闭界面:
rvictl -x <iphone-uid-from-xcode-organizer>
这很好,因为如果你想对模拟器进行数据包嗅探,你也必须涉足到本地 Mac 的流量,但rvictl
会创建一个虚拟界面,只显示你插入 USB 的 iOS 设备的流量港口。
注意:这仅适用于 Mac。
我使用Charles Web Debugging Proxy,但他们有试用版。
如果您的 iPhone/iPad 与您的 Mac 共享相同的 Wifi 网络,则设置非常简单。
- 在 Mac 上安装 Charles
- 获取 Mac 的 IP 地址 - 使用 Mac“网络实用程序”
- 在您的 iPhone/iPad 上打开 Wifi 设置并在“HTTP 代理”下更改为手动并输入步骤 (2) 中的 IP,然后输入端口为 8888(Charles 默认端口)
- 打开 Charles 并在代理设置对话框下确保勾选“启用 Mac OS X 代理”和“使用 HTTP 代理”
- 您现在应该看到出现在 Charles 中的流量
- 如果您想查看 HTTPS 流量,您需要执行额外的 2 个步骤,下载 Charles 证书包,然后将 .crt 文件通过电子邮件发送到您的 iPhone/iPad 并安装。
- 在 Proxy Settings Dialog SSL 选项卡中,添加您要使用端口 443 嗅探的特定 https 顶级域。
如果您的 Mac 和 iOS 设备不在同一个 Wifi 网络上,您可以使用系统偏好设置中共享下的“Internet 共享”选项将您的 Mac 设置为 Wifi 路由器。然后,您将设备连接到该“Wifi”网络并按照上述步骤操作。
通过代理运行它并使用Wireshark监控流量。
对于 Mac OS X
- 安装查尔斯代理
- 在 Charles 中,转到代理 > 代理设置。它应该显示 HTTP 代理端口(默认为 8888)。
对于 Windows
- 安装提琴手2
- 工具 -> Fiddler 选项 -> 连接并选中“允许远程计算机连接”
常规设置
- 转到设置 > Wifi >
i
符号 > 在底部的代理 > 设置为手动,然后为服务器放置您正在使用的计算机 IP 地址,端口放置 8888,因为这是每个应用程序的默认值
ARP 欺骗
最后一部分的一般说明,如果您想嗅探所有网络流量,则可以使用ARP 欺骗将所有流量从您的 iOS 转发到笔记本电脑/台式机。ARP 欺骗有多种工具,需要对所有细节进行研究。这使您可以查看每一盎司的流量,因为您的路由器会将用于 iOS 设备的所有数据路由到笔记本电脑/台式机,然后您将这些数据(自动)转发到 iOS 设备。
请注意,我只推荐这作为最后的手段。
在不确切知道您的要求是什么的情况下,这就是我从 iPhone 上看到 packts 时所做的:在以太网上连接一个 mac,通过机场共享它的网络,然后将 iPhone 连接到那个无线网络。在 Mac 上运行 Wireshark 或 Packet Peeper。
在越狱的 iPhone/iPod 上,“tcpdump”和“pirni”都可以很好地捕获流量 - 在 cydia 存储库中可用。这些数据的分析是通过将捕获转移到另一台机器并使用类似wireshark的东西来完成的。然而,鉴于这些工具似乎正在积极开发,iPhone 可能很快就会处理这一切。
我发现的最佳解决方案有效:
通过 USB 连接您的设备
并输入以下命令:
rvictl -s UDID - (设备 20 个字符的 id,您可以在 iTunes 中找到 4t 或在 Xcode 中找到管理器)
sudo launchctl list com.apple.rpmuxd
sudo tcpdump -n -t -i rvi0 -q tcp
或者只是 sudo tcpdump -i rvi0 -n
如果 rvictl 不起作用,请安装 Xcode
更多信息: 远程虚拟接口
http://useyourloaf.com/blog/2012/02/07/remote-packet-capture-for-ios-devices.html
这是另一种方式http://www.tuaw.com/2011/02/21/how-to-inspect-ioss-http-traffic-without-spending-a-dime/
我没有看到 Roger Nolan 的回复,上面的链接是使用不同工具的相同工作流程。
取决于你想要做什么,通过代理运行它并不理想。只要数据包不被篡改,透明代理就可以正常工作。
我即将在 iOS 4.3.x 上反转从 iPhone 传输到 iPad 的 GPS 数据以获取原始数据 获得干净网络转储的最佳方法是使用“tcpdump”和/或“pirni”正如已经建议的那样。
在这种特殊情况下,我们希望 Tethered 数据需要尽可能透明。显然,您需要将手机越狱才能使其正常工作。
在 Mac OS X 上尝试Debookee,它会透明地拦截 iPhone 的流量,而无需代理,这要感谢 MITM,如前所述。然后,您将实时看到您的设备使用的不同协议。
免责声明:我是付费应用程序 Debookee 开发团队的一员。试用版将在有限的时间内向您展示所有功能。
一个通用的解决方案是使用配置为透明代理的 linux 机器(可能在虚拟机中)来拦截流量,然后使用 wireshark 或 tcpdump 或任何你喜欢的东西对其进行分析。也许MacOS也可以做到这一点,我还没有尝试过。
或者,如果您可以在模拟器中运行应用程序,您可能可以监控自己机器上的流量。
Com'on,没有提到提琴手?爱在哪里 :)
Fiddler 是一个非常流行的 HTTP 调试器,面向开发人员而不是网络管理员(即 Wireshark)。
为 iOS 设置它是相当简单的过程。它也可以解密 HTTPS 流量!
在 QA 部门开始使用 Fiddler 解决问题后,我们的移动团队终于松了一口气。在 fiddler 出现之前,人们会到处摆弄以知道该怪谁,移动团队或 API 团队,但现在不是了。