Cómo comprobar la conectividad VPN en iPhone

Soy nuevo en este desarrollo. Busqué mucho en Internet, pero no puedo encontrar ninguna solución adecuada para ello. Quiero verificar la conectividad VPN disponible en mi aplicación de iPhone cuando estoy obteniendo datos de la máquina cliente que está conectada a través de VPN. Verifiqué si la connection a Internet está disponible pero no puedo verificar si VPN está conectada o no. Por favor, sugiérame en esto.

Si quieres hacer un ping, puedes hacer algo como esto;

  1. Configura un socket para tu ip interna
  2. Hacer que el zócalo no bloquee
  3. Usar seleccionar para verificar el estado del socket

Me funciona

Acabo de encontrar otra forma de verificar la connection VPN, que no se mencionó en ninguna parte. Puede usar getifaddrs () para get interfaces de networking actuales. Luego, repite y revisa sus nombres. Si alguno de ellos contiene taps , tun o ppp, entonces el usuario ha conectado VPN.

- (BOOL)isVPNConnected { struct ifaddrs *interfaces = NULL; struct ifaddrs *temp_addr = NULL; int success = 0; // retrieve the current interfaces - returns 0 on success success = getifaddrs(&interfaces); if (success == 0) { // Loop through linked list of interfaces temp_addr = interfaces; while (temp_addr != NULL) { NSString *string = [NSString stringWithFormat:@"%s" , temp_addr->ifa_name]; if ([string rangeOfString:@"tap"].location != NSNotFound || [string rangeOfString:@"tun"].location != NSNotFound || [string rangeOfString:@"ppp"].location != NSNotFound){ return YES; } temp_addr = temp_addr->ifa_next; } } // Free memory freeifaddrs(interfaces); return NO; } 

UPD: en iOS 9 el código anterior no funciona. Las interfaces son las mismas, no importa si VPN está conectado o no. Prueba el siguiente código en este caso:

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

Ping o Buscar una dirección que solo debería estar disponible en la VPN, si puede conectar la VPN está en uso.