Macosx Setdns

通過C語言接口在Mac App內部對系統的DNS配置進行修改。

Mac OS X設置DNS代碼

示例代碼setDNS.c內容如下:

#include <SystemConfiguration/SystemConfiguration.h>

static bool setDNS(CFStringRef *resolvers, CFIndex resolvers_count)
{
    SCDynamicStoreRef ds = SCDynamicStoreCreate(NULL, CFSTR("setDNS"), NULL, NULL);

    CFArrayRef array = CFArrayCreate(NULL, (const void **) resolvers,
            resolvers_count, &kCFTypeArrayCallBacks);

    CFDictionaryRef dict = CFDictionaryCreate(NULL,
            (const void **) (CFStringRef []) { CFSTR("ServerAddresses") },
            (const void **) &array, 1, &kCFTypeDictionaryKeyCallBacks,
            &kCFTypeDictionaryValueCallBacks);    

    CFArrayRef list = SCDynamicStoreCopyKeyList(ds,
            CFSTR("State:/Network/(Service/.+|Global)/DNS"));

    CFIndex i = 0, j = CFArrayGetCount(list);
    if (j <= 0) {
        return FALSE;
    }
    bool ret = TRUE;
    while (i < j) {
        ret &= SCDynamicStoreSetValue(ds, CFArrayGetValueAtIndex(list, i), dict);
        i++;
    }
    return ret;
}

int main(int argc, const char * argv[])
{
    CFStringRef resolvers[] = {
        CFSTR("8.8.8.8"),
        CFSTR("114.114.114.114")
    };
    setDNS(resolvers, (CFIndex) (sizeof resolvers / sizeof resolvers[0]));

    return 0;
}

對應的Makefile文件內容:

#!/usr/bin/make -f
default: setDNS.c
        cc -o setDNS setDNS.c -framework Foundation -framework SystemConfiguration
clean:
        rm setDNS

謝謝各位,歡迎交流並指正。

---- 大茶園丁@戴維營教育

發佈了60 篇原創文章 · 獲贊 11 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章