Как писал "diciu", вы можете запросить структуру конфигурации системы. Программный эквивалент команды scutil, которую он дал, выглядит примерно так:
#import <SystemConfiguration/SystemConfiguration.h>
- (void)printPrimaryService {
SCDynamicStoreRef dynamicStoreDomainState = SCDynamicStoreCreate(NULL,
CFSTR("myApplicationName"),
NULL,
NULL);
if (dynamicStoreDomainState) {
NSString *netIPv4Key = [NSString stringWithFormat:@"%@/%@/%@/%@",
kSCDynamicStoreDomainState,
kSCCompNetwork,
kSCCompGlobal,
kSCEntNetIPv4];
NSMutableDictionary *netIPv4Dictionary = (NSMutableDictionary *) SCDynamicStoreCopyValue(dynamicStoreDomainState, (CFStringRef)netIPv4Key);
if (netIPv4Dictionary ) {
NSString *primaryService = [netIPv4Dictionary objectForKey:(NSString *)kSCDynamicStorePropNetPrimaryService];
if (primaryService) {
NSLog(@"primary service = \"%@\"\n", primaryService); /* When the Cisco VPN is active, I get "com.cisco.VPN" here */
}
[netIPv4Dictionary release];
}
CFRelease(dynamicStoreDomainState);
}
}
Используя вышеизложенное, вы можете определить, подключен ли клиент Cisco VPN. Затем вы можете сделать нечто подобное, чтобы получить DNS-серверы, связанные с VPN-подключением. Я сравниваю полученные DNS-серверы с DNS-сервером моей компании, чтобы узнать, подключен ли я к VPN. Klunky, но работает и работает быстро - не нужно ждать пинга до тайм-аута.
Обратите внимание, что в последней версии Cisco VPN Client Cisco опубликовала API. К сожалению, это только для Microsoft Windows. Может быть, они когда-нибудь выпустят его для Mac.