swift get dns info

func outputDnsInfo() {
        var res = __res_9_state()
        guard res_9_ninit(&res) == 0 else {
            print("get dns init failed")
            return
        }
        
        let maxServers = 10
        var servers = [res_9_sockaddr_union](repeating: res_9_sockaddr_union(), count: maxServers)

        res_9_getservers(&res, &servers, res.nscount)
        
        res_9_ndestroy(&res)

        var arr = servers.filter({ $0.sin.sin_len > 0 })
        
        var ip4s: [String] = []
        var ip6s: [String] = []
        for i in 0 ..< arr.count {
            if arr[i].sin.sin_family == AF_INET6 {
                let ip = UnsafeMutablePointer<Int8>.allocate(capacity: Int(INET6_ADDRSTRLEN))
                if let ipStr = inet_ntop(AF_INET6, &(arr[i].sin6.sin6_addr), ip, socklen_t(INET6_ADDRSTRLEN)) {
                    ip6s.append(String(cString: ipStr))
                }
            } else {
                ip4s.append(String(cString: inet_ntoa(arr[i].sin.sin_addr)))
            }
        }
        
        print("ip4s => \(ip4s)")
        print("ip6s => \(ip6s)")
    }

ps.需要bridging里引用#include <resolv.h>

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容