iOS, реализующая протокол NETunnelProviderProtocol без удаленного сервера

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

Задача

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

введите здесь описание изображения

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

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

Вопрос

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

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


person wheresmycookie    schedule 16.06.2019    source источник
comment
Вы достигли этого местного поставщика туннелей?   -  person GGirotto    schedule 17.03.2020
comment
У меня такая же проблема. Удалось найти решение? Все мои права настроены правильно, я смотрю журналы в Console.app. Я добавил Sandbox в свои права (оба) со значением YES. По-прежнему не удается заставить подклассы NEPacketTunnelProvider переопределить startTunnel для регистрации   -  person sam k    schedule 17.04.2020


Ответы (2)


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

  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.
person Jordan Johnson    schedule 18.06.2019
comment
Я действительно узнал, что было лицензионное соглашение, которое кто-то из команды должен был принять, прежде чем я смогу использовать расширение, но ошибки не было. Тем не менее, это действительно полезный контрольный список, поэтому я приму его, если у кого-то возникнут проблемы в будущем. Спасибо! - person wheresmycookie; 19.06.2019
comment
Привет, @wheresmycookie, не могли бы вы помочь в том же случае, мой startTunnel также не вызывает расширение - person Abhimanyu Rathore; 04.09.2019
comment
@AbhimanyuRathore, можете ли вы предоставить дополнительную информацию? Что вы пробовали и какие проблемы у вас сейчас возникают? - person wheresmycookie; 04.09.2019
comment
Уважаемый @wheresmycookie, прежде всего спасибо за ответ. Я создал приложение с расширением пакетного туннеля и выполнил все 2 инструкции идентификаторов приложений и все настроил. но мое расширение startTunnel не вызывает :( Я пытаюсь успешно подключить сервер IKEv2 (который подключен к NEVPNManager). Также загружен профиль конфигурации в iPad. Успешно в соответствии с рекомендациями Apple: - developer.apple.com/documentation/networkextension/. - person Abhimanyu Rathore; 05.09.2019
comment
Статус VPN застрял в Connecting, а не Connected :( - person Abhimanyu Rathore; 05.09.2019
comment
там я хочу, чтобы ваша поддержка преобразовала это в connected + StartTunnel Call - person Abhimanyu Rathore; 05.09.2019

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

setTunnelNetworkSettings(nil) {  error in
            pendingStartCompletion(error)
            
 }

person yarshure    schedule 18.06.2019