首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从iphone设置获取DNS服务器IP

从iphone设置获取DNS服务器IP
EN

Stack Overflow用户
提问于 2015-07-06 21:33:29
回答 5查看 7.7K关注 0票数 7

我试图找到一种方法来获得我的DNS服务器ip,它出现在设置->wi>DNS->DNS下面。我不知道苹果是否允许以编程方式获取这一信息。

EN

Stack Overflow用户

发布于 2016-12-23 14:13:35

这是一个更好的Swift3+变体,它是libresolv Swift包装器的摘录,用于iOS的dig,并正确地处理IPV6名称服务器:

代码语言:javascript
复制
open class Resolver {

    fileprivate var state = __res_9_state()

    public init() {
        res_9_ninit(&state)
    }

    deinit() {
        res_9_ndestroy(&state)
    }

    public final func getservers() -> [res_9_sockaddr_union] {

        let maxServers = 10
        var servers = [res_9_sockaddr_union](repeating: res_9_sockaddr_union(), count: maxServers)
        let found = Int(res_9_getservers(&state, &servers, Int32(maxServers)))

        // filter is to remove the erroneous empty entry when there's no real servers
       return Array(servers[0 ..< found]).filter() { $0.sin.sin_len > 0 }
    }
}

可以使用以下方法将res_9_sockaddr_union转换为其字符串值:

代码语言:javascript
复制
extension Resolver {
    public static func getnameinfo(_ s: res_9_sockaddr_union) -> String {
        var s = s
        var hostBuffer = [CChar](repeating: 0, count: Int(NI_MAXHOST))

        len sinlen = socklen_t(s.sin.sin_len)
        let _ = withUnsafePointer(to: &s) {
            $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
                Darwin.getnameinfo($0, sinlen,
                                   &hostBuffer, socklen_t(hostBuffer.count),
                                   nil, 0,
                                   NI_NUMERICHOST)
            }
        }

        return String(cString: hostBuffer)
    }
}

所有这些组合都可以得到一个包含以下服务器列表的String[]

代码语言:javascript
复制
let servers = Resolver().getservers().map(Resolver.getnameinfo)
票数 9
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31256024

复制
相关文章

相似问题

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