Проверьте VPN-соединение в Objective-C - PullRequest
0 голосов
/ 06 ноября 2018

Я хотел проверить, есть ли VPN-соединение или нет. Я нашел код в Swift, но я не могу использовать NEVPNStatus в Objective-C:

func checkNEStatus( status:NEVPNStatus ) {
    switch status {
    case NEVPNStatus.Invalid:
      print("NEVPNConnection: Invalid")
    case NEVPNStatus.Disconnected:
      print("NEVPNConnection: Disconnected")
    case NEVPNStatus.Connecting:
      print("NEVPNConnection: Connecting")
    case NEVPNStatus.Connected:
      print("NEVPNConnection: Connected")
    case NEVPNStatus.Reasserting:
      print("NEVPNConnection: Reasserting")
    case NEVPNStatus.Disconnecting:
      print("NEVPNConnection: Disconnecting")
  }
}

Я использую приведенный ниже код для Objective-C: но он не работает на некоторых китайских сетевых устройствах. Они отправляют "TUN", если сеть все еще не использует vpn.

- (BOOL)isVPNConnected
{
    NSDictionary *dict = CFBridgingRelease(CFNetworkCopySystemProxySettings());
    NSArray *keys = [dict[@"__SCOPED__"]allKeys];
    NSLog(@"keys==>%@",keys);
    for (NSString *key in keys) {
        if ([key rangeOfString:@"tap"].location != NSNotFound ||
            [key rangeOfString:@"tun"].location != NSNotFound ||
            [key rangeOfString:@"ipsec"].location != NSNotFound ||
            [key rangeOfString:@"ppp"].location != NSNotFound){
            return YES;
        }
    }
    return NO;
}

1 Ответ

0 голосов
/ 19 ноября 2018

Добавьте наблюдателя в ViewDidLoad для получения статуса VPN.

self.vpnManager.loadFromPreferences { (error) in
          if error != nil {
            print(error.debugDescription)
          }
         else{
            print("No error from loading VPN viewDidLoad")
         }
     }

 notificationObserver = NSNotificationCenter.defaultCenter().addObserverForName(NEVPNStatusDidChangeNotification, object: nil , queue: nil) {
   notification in

   print("received NEVPNStatusDidChangeNotification")

   let nevpnconn = notification.object as! NEVPNConnection
   let status = nevpnconn.status
   self.checkNEStatus(status)
}
...