我试图找到一种方法来获得我的DNS服务器ip,它出现在设置->wi>DNS->DNS下面。我不知道苹果是否允许以编程方式获取这一信息。
发布于 2016-12-23 14:13:35
这是一个更好的Swift3+变体,它是libresolv Swift包装器的摘录,用于iOS的dig,并正确地处理IPV6名称服务器:
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转换为其字符串值:
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[]:
let servers = Resolver().getservers().map(Resolver.getnameinfo)https://stackoverflow.com/questions/31256024
复制相似问题