Когда я использую Charles Proxy для iOS и играю в некоторые игры, я узнаю, что они устанавливают соединения с префиксом протокола «socket: //», за которым следует IP-адрес (вместо имени хоста, которое всегда присутствует для других HTTP (s) соединения).Я бы предположил, что это веб-сокеты.
В настоящее время я пытаюсь реализовать инструмент для отслеживания элементарной сетевой активности.Для архивации я использую NEKit
(https://zhuhaow.me/NEKit/) в сочетании с расширением NEPacketTunnelProvider
для iOS. С его помощью я смог настроить локальный прокси-сервер HTTP и настроить сетевой интерфейс наперенаправлять каждый запрос HTTP (ов) через этот локальный прокси. Через наблюдателя я смог увидеть все запрошенные имена хостов.
Теперь я обнаружил, что некоторые игры (те, которые используют веб-сокеты) не работаютправильно с моим решением. Что касается этого обсуждения https://news.ycombinator.com/item?id=16694670, похоже, что проксирование потока данных HTTP (s) не позволяет мне обрабатывать подключения к веб-сокету:
Да, но проблемаЧарльз (ну, по крайней мере, связанный с iOS) заключается в том, что веб-сокеты iOS не проходят через настроенный прокси-сервер HTTP. Они просто считаются необработанным сокетом. Таким образом, даже на настольном компьютере Чарльз это nogo.
Из-за этого некоторые приложения даже не работают, когда мой трекер включен, поскольку они не могут установить соединение со своими серверами.
Есть ли возможность архивироватьчто-то похожее для соединений через веб-сокет, поскольку комбинация GCDHTTPProxyServer
(NEKit
) и NEProxySettings
(NetworkExtension
) работает только для HTTP (s)?Как я могу отслеживать и (что еще лучше) прокси-соединения с веб-сокетами?