0

我想写一个mac vpn客户端,现在,在系统网络中,它有一个名为“通过VPN连接发送所有流量”的设置,如何通过代码设置它?我认为它不在SCNetworkConfiguration

4

2 回答 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 回答