我有应用程序包含vpn配置使用数据包隧道提供商在tunnelNetworkSettings.dnsSettings上的隧道设置我们把8.8.8.8有任何优雅和合法的方法来改变它为动态域名系统的设备使用(wifi,4g等...)
让dnsSettings = NEDNSSettings(servers:8.8.8.8)
tunnelNetworkSettings.dnsSettings = dnsSettings
发布于 2021-02-04 13:54:45
您可以使用以下代码获取系统DNS服务器
static func getSystemDnsList() -> ([String]/*IPV4*/, [String]/*IPV6*/) {
var dnsListIPV4 = [String]()
var dnsListIPV6 = [String]()
let structSize = MemoryLayout<__res_9_state>.size
let res = UnsafeMutablePointer<__res_9_state>.allocate(capacity: structSize)
let result = res_9_ninit(res)
if result == 0 {
let structSize = MemoryLayout<res_9_sockaddr_union>.size
let capacity = Int(res.pointee.nscount) * structSize
let addrUnion = UnsafeMutablePointer<res_9_sockaddr_union>.allocate(capacity: capacity)
res_9_getservers(res, addrUnion, res.pointee.nscount)
for i in 0..<Int(res.pointee.nscount) {
if addrUnion[i].sin.sin_family == AF_INET {
let ip = UnsafeMutablePointer<Int8>.allocate(capacity: Int(INET_ADDRSTRLEN))
var ipStringObject : String?
if let ipStr = inet_ntop(AF_INET, &(addrUnion[i].sin.sin_addr), ip, socklen_t(INET_ADDRSTRLEN)) {
ipStringObject = String(utf8String: ipStr)
}
var portStringObject : String?
let port = nTohs(addrUnion[i].sin.sin_port)
portStringObject = String(format: "%d", port)
if let ip = ipStringObject {
dnsListIPV4.append(ip)
}
} else if addrUnion[i].sin6.sin6_family == AF_INET6 {
let ip = UnsafeMutablePointer<Int8>.allocate(capacity: Int(INET6_ADDRSTRLEN))
var ipStringObject : String?
if let ipStr = inet_ntop(AF_INET6, &(addrUnion[i].sin6.sin6_addr), ip, socklen_t(INET6_ADDRSTRLEN)) {
ipStringObject = String(utf8String: ipStr)
}
var portStringObject : String?
let port = nTohs(addrUnion[i].sin6.sin6_port)
portStringObject = String(format: "%d", port)
if let ip = ipStringObject {
dnsListIPV6.append(ip)
}
}
}
res_9_nclose(res)
free(res)
}
return (dnsListIPV4, dnsListIPV6)
}https://stackoverflow.com/questions/64785942
复制相似问题