DNSClient

2.4.1

A DNS Resolver in Swift
orlandos-nl/DNSClient

What's New

2.4.1

2023-08-26T18:30:42Z

Disable PTR APIs on Linux, as the C structs being used are symbol name is mangled on Linux, and differently between some Swift versions

NioDNS

Async DNS resolution, with all the DNS features you need!

Join our Discord for any questions and friendly banter.

Installation 💥

Add the package:

.package(url: "https://github.com/orlandos-nl/DNSClient.git", from: "2.0.0"),

And to your target:

.product(name: "DNSClient", package: "DNSClient"),

Usage 🤯

Connect to your default DNS Server:

let client = try DNSClient.connect(on: loop).wait()

Connect to a specific DNS Server:

let googleDNS = SocketAddress(ipAddress: "8.8.8.8", port: 53)
let client = try DNSClient.connect(on: loop, config: [googleDNS]).wait()

Resolve SRV Records:

let records = try client.sendQuery(forHost: "example.com", type: .srv).wait()

Resolve TXT Records:

let records = try client.sendQuery(forHost: "example.com", type: .txt).wait()

Resolve PTR Records:

let records = try client.ipv4InverseAddress("198.51.100.1").wait()

let records = try client.ipv6InverseAddress("2001:DB8::").wait()

Need I say more?

Notes

The DNS Client doesn't retain itself during requests. This means that you cannot do the following:

DNSClient.connect(on: request.eventLoop).flatMap { client in
    // client.doQueryStuff()
}

The client will deallocate itself, resulting in a timeout. Make sure that the client is strongly referenced, either until all results are in or by setting it on a shared context. In Vapor, that can be the request's storage container. On other services, you could consider a global, ThreadSpecificVariable or a property on your class.

Featured In 🛍

Description

  • Swift Tools 5.5.0
View More Packages from this Author

Dependencies

Last updated: Thu Apr 11 2024 11:09:16 GMT-0900 (Hawaii-Aleutian Daylight Time)