首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Mac OS X上以编程方式查找DNS服务器设置

在Mac OS X上以编程方式查找DNS服务器设置
EN

Stack Overflow用户
提问于 2008-11-04 01:14:20
回答 5查看 4.8K关注 0票数 5

我有一些跨平台的DNS客户端代码,我用来做端到端的SMTP,在windows上,我可以通过在注册表中查找当前的DNS服务器ip地址。在Mac上,我可能可以使用第一个答案中提到的SystemConfiguration框架,但是具体的方法还不是很明显。

例如,SCDynamicStoreCopyDHCPInfo会返回一些动态DHCP相关数据,但不会返回DNS服务器地址。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-11-07 01:14:31

也可以从/etc/resolv.conf获取它们

票数 1
EN

Stack Overflow用户

发布于 2014-11-18 05:19:30

我知道你已经很久没有需要这个了,但是没有什么比一个老的未解决的答案更糟糕的了。由于权限问题,您无法从"/etc/resolv.conf“访问它们。经过多次搜索,幸运的是,我发现可以通过res_ninit()函数获得它。

代码语言:javascript
复制
// Get native iOS System Resolvers
res_ninit(&_res);
res_state res = &_res;

for (int i = 0; i < res->nscount; i++) {
  sa_family_t family = res->nsaddr_list[i].sin_family;
  int port = ntohs(res->nsaddr_list[i].sin_port);
  if (family == AF_INET) { // IPV4 address
    char str[INET_ADDRSTRLEN]; // String representation of address
    inet_ntop(AF_INET, & (res->nsaddr_list[i].sin_addr.s_addr), str, INET_ADDRSTRLEN);
  } else if (family == AF_INET6) { // IPV6 address
    char str[INET6_ADDRSTRLEN]; // String representation of address
    inet_ntop(AF_INET6, &(res->nsaddr_list [i].sin_addr.s_addr), str, INET6_ADDRSTRLEN);
  }
}
res_ndestroy(res);
票数 6
EN

Stack Overflow用户

发布于 2016-01-22 15:03:03

我知道现在回答这个问题已经很晚了,但对其他人可能会有所帮助。

此代码将有助于完成此任务。

代码语言:javascript
复制
SCPreferencesRef prefsDNS = SCPreferencesCreate(NULL, CFSTR("DNSSETTING"), NULL);
CFArrayRef services = SCNetworkServiceCopyAll(prefsDNS);
long servicesCount = CFArrayGetCount(services);
for (long i = 0; i < servicesCount; i++) {
    const SCNetworkServiceRef service = (const SCNetworkServiceRef)CFArrayGetValueAtIndex(services, i);
    CFStringRef interfaceServiceID = SCNetworkServiceGetServiceID(service);
    CFStringRef primaryservicepath = CFStringCreateWithFormat(NULL,NULL,CFSTR("State:/Network/Service/%@/DNS"),interfaceServiceID);
    SCDynamicStoreRef dynRef = SCDynamicStoreCreate(kCFAllocatorSystemDefault, CFSTR("DNSSETTING"), NULL, NULL);
    CFPropertyListRef propList = SCDynamicStoreCopyValue(dynRef,primaryservicepath);
    if (propList) {
        CFDictionaryRef dict = (CFDictionaryRef)propList;
        CFArrayRef addresses = (CFArrayRef)CFDictionaryGetValue(dict, CFSTR("ServerAddresses"));
        long addressesCount = CFArrayGetCount(addresses);
        for (long j = 0; j < addressesCount; j++) {
            CFStringRef address = (CFStringRef)CFArrayGetValueAtIndex(addresses, j);
            // Print address
            CFShow(address);
        }
        CFRelease(propList);
    }
    CFRelease(dynRef);
    CFRelease(primaryservicepath);
}
CFRelease(services);
CFRelease(prefsDNS);
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/260518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档