2011-04-27 112 views

回答

7

我最近有同样的问题。我在这里发布我的解决方案:

http://blog.notampering.com/

这里的片段......希望它帮助。 。

#include <stdio.h> 
#include <SystemConfiguration/SCPreferences.h> 
#include <SystemConfiguration/SCDynamicStore.h> 


int main (int argc, const char * argv[]) 
{ 
    //get current values 
    SCDynamicStoreRef dynRef=SCDynamicStoreCreate(kCFAllocatorSystemDefault, CFSTR("iked"), NULL, NULL); 
CFDictionaryRef ipv4key = SCDynamicStoreCopyValue(dynRef,CFSTR("State:/Network/Global/IPv4")); 
CFStringRef primaryserviceid = CFDictionaryGetValue(ipv4key,CFSTR("PrimaryService")); 
CFStringRef primaryservicepath = CFStringCreateWithFormat(NULL,NULL,CFSTR("State:/Network/Service/%@/DNS"),primaryserviceid); 
CFDictionaryRef dnskey = SCDynamicStoreCopyValue(dynRef,primaryservicepath); 

//create new values 
CFMutableDictionaryRef newdnskey = CFDictionaryCreateMutableCopy(NULL,0,dnskey); 
CFDictionarySetValue(newdnskey,CFSTR("DomainName"),CFSTR("example.com")); 

CFMutableArrayRef dnsserveraddresses = CFArrayCreateMutable(NULL,0,NULL); 
CFArrayAppendValue(dnsserveraddresses, CFSTR("8.8.8.8")); 
CFArrayAppendValue(dnsserveraddresses, CFSTR("4.2.2.2")); 
CFDictionarySetValue(newdnskey, CFSTR("ServerAddresses"), dnsserveraddresses); 

//set values 
bool success = SCDynamicStoreSetValue(dynRef, primaryservicepath, newdnskey); 

//clean up 
CFRelease(dynRef); 
CFRelease(primaryservicepath); 
CFRelease(dnskey); 
CFRelease(dnsserveraddresses); 
CFRelease(newdnskey); 
} 
+1

此代码是不是为我工作:(SCDynamicStoreSetValue()返回false – Omkar 2015-05-20 17:41:23

+0

你运行它作为根 – dgatwood 2015-07-02 18:16:28

+1

是必须以root身份运行,并且至少在我的环境,我需要添加:?#在顶部包含进行编译。 – 2016-08-23 13:49:49