通过VPN连接发送所有流量

时间:2012-09-19 14:44:37

标签: vpn

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

2 个答案:

答案 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协议的协议配置,以分别禁用或启用该标志。