当我在 iOS 上使用 Charles Proxy 并玩一些游戏时,我发现它们使用协议前缀“socket://”后跟 IP 地址(而不是主机名,其他 HTTP(s) 连接始终存在)建立连接)。我假设那些是websockets。
目前,我正在尝试实现一个工具来跟踪基本的网络活动。为了存档,我将NEKit
( https://zhuhaow.me/NEKit/ ) 与NEPacketTunnelProvider
iOS 扩展结合使用。使用它,我能够设置本地 HTTP 代理服务器并设置网络接口以通过该本地代理重定向每个 HTTP(s) 请求。通过观察者,我能够看到所有请求的主机名。
现在我发现,一些游戏(那些使用 websockets 的游戏)在我的解决方案中不能正常工作。关于这个讨论https://news.ycombinator.com/item?id=16694670似乎代理 HTTP(s) 数据流不能让我处理 websocket 连接:
是的,但是 Charles 的问题(好吧,至少与 iOS 相关)是 iOS websockets 不通过配置的 HTTP 代理。它们只是被认为是原始套接字。因此,即使在桌面 Charles 上,它也是一个 nogo。
因此,某些应用程序在我的跟踪器启用时甚至无法运行,因为它们无法建立与服务器的连接。
GCDHTTPProxyServer
由于( NEKit
) 和NEProxySettings
( NetworkExtension
) 的组合仅适用于 HTTP(s),是否有可能为 websocket 连接存档类似的内容?如何跟踪和(甚至更好)代理 websocket 连接?