punchnet-macos/punchnet/Core/DNSResolver.swift
2025-05-14 19:59:39 +08:00

56 lines
1.4 KiB
Swift

//
// DNSResolver.swift
// punchnet
//
// Created by on 2025/5/14.
//
import Foundation
import Darwin
struct DNSResolver {
// ip
static func resolveAddrInfos(_ hostname: String) -> [String] {
var hints = addrinfo(
ai_flags: AI_ALL,
ai_family: AF_UNSPEC,
ai_socktype: SOCK_STREAM,
ai_protocol: 0,
ai_addrlen: 0,
ai_canonname: nil,
ai_addr: nil,
ai_next: nil
)
var result: UnsafeMutablePointer<addrinfo>?
let error = getaddrinfo(hostname, nil, &hints, &result)
guard error == 0 else {
return []
}
var ips = [String]()
var current = result
while current != nil {
var host = [CChar](repeating: 0, count: Int(NI_MAXHOST))
if let addr = current?.pointee.ai_addr {
getnameinfo(
addr,
socklen_t(addr.pointee.sa_len),
&host,
socklen_t(host.count),
nil,
0,
NI_NUMERICHOST
)
let ip = String(cString: host)
ips.append(ip)
}
current = current?.pointee.ai_next
}
freeaddrinfo(result)
return ips
}
}