DNSKit

一个用于 Swift 的异步 DNS 库。

DNSKit 提供对 DNS 生态系统广泛的支持,包括:

许可协议

DNSKit 使用 GNU Lesser General Public License 3.0 (LGPL3) 许可,它是 GNU General Public License 3.0 (GPL) 的扩展。

警告

在使用 DNSKit 到您的项目之前,请务必了解这些许可协议的要求!

用法

DNSKit 提供了一个现代的、以 Swift 为中心的 API,用于与 DNS 查询和响应进行交互。

警告

DNSKit 不保证发布版本之间的 API 稳定性。请务必仔细阅读发行说明,了解您需要进行的更改。

获取主机的 IPv4 地址

import DNSKit

/// Get the IP address of the given name
/// - Parameter name: The name to lookup
/// - Throws: On DNS or parsing error
/// - Returns: An IPv4 address
func getAddressOf(name: String) async throws -> String {
    let reply = try await Query(transportType: .DNS, serverAddress: "1.1.1.1", recordType: .A, name: name).execute()
    if reply.responseCode != .NOERROR {
        // Bad response code (i.e. unknown domain)
    }
    if reply.answers[0].recordType != .A {
        // Unexpected record type
    }
    let data = reply.answers[0].data as! ARecordData
    return data.ipAddress
}

验证 DNSSEC

DNSKit 具有完整的 DNSSEC 客户端,并将验证签名并建立整个区域链的完全信任。

import DNSKit

func checkDNSSEC() async throws {
    let query = try Query(transportType: .DNS, serverAddress: "1.1.1.1", recordType: .A, name: "example.com")
    let reply = try await query.execute()
    let dnssecResult = try await query.authenticate(message: reply)

    if !dnssecResult.chainTrusted || !dnssecResult.signatureVerified {
        // DNSSEC validation failed
    }
}