我想写一个mac vpn客户端,现在,在系统网络中,它有一个名为“通过VPN连接发送所有流量”的设置,如何通过代码设置它?我认为它不在SCNetworkConfiguration
答案 0 :(得分: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);
}
答案 1 :(得分:0)
kSCPropNetOverridePrimary为0应禁用此功能(您可以在ipv4字典中查找该键)。
您需要为该密钥设置为0或1设置ipv4协议的协议配置,以分别禁用或启用该标志。