0

システムネットワークにmacvpnクライアントを作成したいのですが、「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ディクショナリでそのキーを検索できます)。

そのフラグを無効または有効にするには、そのキーを0または1に設定してipv4プロトコルのプロトコル構成を設定する必要があります。

于 2013-07-07T14:45:17.597 に答える