我想写一个mac vpn客户端,现在,在系统网络中,它有一个名为“通过VPN连接发送所有流量”的设置,如何通过代码设置它?我认为它不在SCNetworkConfiguration
问问题
1144 次
2 回答
1
这是我以前使用的一种方法。它非常直接地说明了如何获取当前的 ipv4 字典,然后对其进行更改并重新设置。根据您的需要将 CFSTR("1") 更改为 0 或 1
#define GetCasted(value, type) ((value) && (CFGetTypeID(value) == type##GetTypeID()) ? ((type##Ref)value) : NULL)
-(void)setIPv4Stuff:(SCNetworkServiceRef)service{
SCNetworkProtocolRef protoR = SCNetworkServiceCopyProtocol(service, kSCNetworkProtocolTypeIPv4);
CFDictionaryRef proxyDictR = SCNetworkProtocolGetConfiguration(protoR);
const void *configMethodP = proxyDictR ? CFDictionaryGetValue(proxyDictR, kSCPropNetIPv4ConfigMethod) : NULL;
CFStringRef configMethod = GetCasted(configMethodP, CFString);
CFMutableDictionaryRef newProxyDictR;
newProxyDictR = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
CFDictionarySetValue(newProxyDictR, kSCPropNetIPv4ConfigMethod, configMethod);
CFDictionarySetValue(newProxyDictR, kSCPropNetOverridePrimary, CFSTR("1"));
SCNetworkProtocolSetConfiguration(protoR, newProxyDictR);
CFRelease(newProxyDictR);
}
于 2014-10-03T10:53:41.527 回答
0
kSCPropNetOverridePrimary 为 0 应该禁用此功能(您可以在 ipv4 字典中查找该键)。
您需要为 ipv4 协议设置协议配置,并将该键设置为 0 或 1 以分别禁用或启用该标志。
于 2013-07-07T14:45:17.597 回答