iOS реализует NETunnelProviderProtocol без удаленного сервера - PullRequest
0 голосов
/ 16 июня 2019

Я пытаюсь реализовать анализатор пакетов, похожий на Чарльз для iOS , используя платформу NetworkExtension для iOS.

Цель

Итак, это большая цель, и я 'Я прямо сейчас разбил его на крошечный кусочек: я хочу увидеть os_log из моего NEPacketTunnelProvider (нижняя рамка на диаграмме)

enter image description here

Что я сделал до сих пор

  1. Я создал цель NetworkExtension для типа PacketTunnel.Это фрагмент кода в 3-м блоке на диаграмме под названием «NEPacketTunnelProvider».
  2. Я включил возможности «группы приложений», «персональный VPN» и «Расширение сети» из XCode.

Вопрос

Я смотрю в Console.app, чтобы увидеть вывод os_log("STARTING TUNNEL!!!!").Когда я загружаю конфигурацию и выполняю вызов startVPNTunnel(), почему мой код TunnelProvider никогда не вызывается?

Я убедился, что startVPNTunnel() вызывается, установив точку останова в моем коде.

Ответы [ 2 ]

1 голос
/ 19 июня 2019

Существует множество причин, по которым процесс расширения сети может не запускаться:

  1. Я бы поставил точку останова на os_log("STARTING TUNNEL!!!!") и подключил к процессу расширения вашей сети в Xcode через Debug -> Attach to Process by PID or Name..., прежде чем пытаться запустить VPN
  2. Расширение сети должно расширять идентификатор комплекта содержащего приложения. Например. если содержащее приложение - com.example.vpn, то расширение сети может быть com.example.vpn.tunnel.
  3. Убедитесь, что ваше сетевое расширение Info.plist содержит словарь NSExtension с NSExtensionPointIdentifier и NSExtensionPrincipalClass, содержащий com.apple.networkextension.packet-tunnel и ваш класс NEPacketTunnelProvider (например, $(PRODUCT_MODULE_NAME).PacketTunnelProvider) соответственно.
  4. Применяется ли разрешение на расширение сети провайдера пакетных туннелей как для содержащегося приложения, так и для расширения сети?
  5. Если вы внедряете провайдера пакетного туннеля, вы не хотите включать право Personal VPN.
0 голосов
/ 18 июня 2019

в функции startVPNTunnel, вы должны вызвать setTunnelNetworkSettings, тогда туннель запустится, после этого вы сможете читать / записывать пакеты.

setTunnelNetworkSettings(nil) {  error in
            pendingStartCompletion(error)
            
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...