3
使用SystemConfiguration框架或其他框架的任何示例? (類似的問題Finding DNS server settings programmatically on Mac OS X有相當混亂的答案)它可以在mac os上以編程方式更改DNS?
使用SystemConfiguration框架或其他框架的任何示例? (類似的問題Finding DNS server settings programmatically on Mac OS X有相當混亂的答案)它可以在mac os上以編程方式更改DNS?
我最近有同樣的問題。我在這裏發佈我的解決方案:
這裏的片段......希望它幫助。 。
#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);
}
此代碼是不是爲我工作:(SCDynamicStoreSetValue()返回false – Omkar 2015-05-20 17:41:23
你運行它作爲根 – dgatwood 2015-07-02 18:16:28
是必須以root身份運行,並且至少在我的環境,我需要添加:?#在頂部包含進行編譯。 –
2016-08-23 13:49:49