美文网首页iOS 学习iOS安全iOS面试题
iOS 使用NetworkExtension创建 VPN(二)

iOS 使用NetworkExtension创建 VPN(二)

作者: 后浪普拉斯 | 来源:发表于2018-03-05 15:02 被阅读236次

    前一篇文章我们只是用了NEVPNManager,使用系统协议创建VPN,而没有使用NETunnelProvider扩展网络核心网络层实现非标准化的私有VPN,接下来我们分析一下这一部分。

    NETunnelProviderManager


    1、 NETunnelProviderManager 是NEVPNManager 的子类,所以功能上和NEVPNManager 其实相同,它和VPN是一一对应的,我们设置的manager设置成NETunnelProviderManager,而不是NEVPNManager。
    2 、我们接下来针对manager设置VPN的配置,此时按照NEKit的shadowsock 的参数来配置manager的protocolConfiguration,和我们之前的配置manager的conf是一样的。
    3、 接下来我们还会去保存VPN、监听状态。
    4、 打开或者关闭VPN。


    在打开或者关闭的时候,如果要使用私有协议的时候就用到了接下来的NEPacketTunnelProvider这个类
    

    NEPacketTunnelProvider

    NEPacketTunnelProvider 是VPN的核心代码,项目中我们创建的PacketTunnelProvider是NEPacketTunnelProvider的子类,我们必须实现的两个方法:

    - (void)startTunnelWithOptions:(nullable NSDictionary<NSString *,NSObject *> *)options completionHandler:(void (^)(NSError * __nullable error))completionHandler NS_AVAILABLE(10_11, 9_0);  
    
    - (void)stopTunnelWithReason:(NEProviderStopReason)reason completionHandler:(void (^)(void))completionHandler NS_AVAILABLE(10_11, 9_0);
    

    当manager(NETunnelProviderManager)对象调用方法startVPNTunnelWithOptions:andReturnError:时,控制器将会跳转到Extension的startTunnelWithOptions的方法中。

    我们看- (BOOL)startVPNTunnelWithOptions:(nullable NSDictionary<NSString *,NSObject *> *)options andReturnError:(NSError **)error NS_AVAILABLE(10_11, 9_0);的参数,第一个参数options:开发者自己定义的信息,第二个参数'completionHandler':block回调。

    - (void)stopTunnelWithReason:(NEProviderStopReason)reason completionHandler:(void (^)(void))completionHandler;,reason表示VPN被关闭的理由,第二个参数'completionHandler':block回调。

    那我们如何调用Network Extension?

    我们在完成PacketTunnel的代码情况下,我们调用Extension的代码。

    • 1、运行应用
    • 2、停止运行
    • 3、 Xcode菜单中 'Debug->attach to process by PID or name',填入'GameVPNPacket',然后'Attach'.


      image.png

    -4、在手机上再运行应用。

    总结:

    在使用PacketTunnelProvider中会有使用NEKit的情况,之后需要研究一下NEKit的使用,具体的使用步骤大体相似。

    参考:博客Bloodline's Blog 构建 NetworkExtension 应用
    github代码lettleprince 的 QLadder 代码

    相关文章

      网友评论

      • 冷煖自知:能问下ss的服务器怎么做代理啊
        冷煖自知:@AlexYangle 我的意思是iOS客户端怎么去访问SS的服务端,VPC这已经配置好了,只是客户端这边不知道怎么设置,SS不需要用户名但是加密规则OC的枚举里面没有
        后浪普拉斯:这里有一个搭建ipsec-vpn的地址:https://github.com/hwdsl2/setup-ipsec-vpn,你可以看一下。

      本文标题:iOS 使用NetworkExtension创建 VPN(二)

      本文链接:https://www.haomeiwen.com/subject/hsxhfftx.html