Ein reiner Nim Domain Name System (DNS)-Client, implementiert mit dnsprotocol.
Diese Implementierung verfügt über synchrone und asynchrone (asynchrone) Prozeduren (Procs) zum Übertragen von Daten über das Internet unter Verwendung des UDP- und TCP-Protokolls.
nimble install ndns
oder
nimble install https://github.com/rockcavera/nim-ndns.git
Auflösen von IPv4-Adressen für nim-lang.org ( nicht asynchron ):
import ndns
let client = initDnsClient ()
echo resolveIpv4 (client, " nim-lang.org " )
Auflösen von IPv4-Adressen für nim-lang.org ( asynchron ):
import asyncdispatch, ndns
let client = initDnsClient ()
echo waitFor asyncResolveIpv4 (client, " nim-lang.org " )
Ein „reales“ asynchrones Beispiel finden Sie unter „resolver.nim“. In diesem Beispiel habe ich so viele Kommentare wie möglich gemacht, auch wenn sie albern aussehen. Ich denke, es könnte jemandem helfen, da ich ein ähnliches Beispiel privat für einen Nim-Neuling bereitgestellt habe. Es kann auch mit -d:showLoopLog
kompiliert werden, um den asynchronen Workflow anzuzeigen.
Erstellen eines Message
Objekts mit einer QType.A
-Abfrage für den Domänennamen nim-lang.org, Übertragen der Message
und Empfangen der Antwort ( nicht asynchron ):
import ndns
let header = initHeader ( randId (), rd = true )
let question = initQuestion ( " nim-lang.org " , QType .A, QClass . IN )
# If the last character of "nim-lang.org" is not a '.', the initializer will
# add, as it is called the DNS root.
let msg = initMessage (header, @ [question])
# The initializer automatically changes `header.qdcount` to `1'u16`
let client = initDnsClient ()
var rmsg = dnsQuery (client, msg)
echo repr (rmsg)
Erstellen eines Message
Objekts mit einer QType.A
Abfrage für den Domänennamen nim-lang.org, Übertragen der Message
und Empfangen der Antwort ( asynchron ):
import asyncdispatch, ndns
let header = initHeader ( randId (), rd = true )
let question = initQuestion ( " nim-lang.org " , QType .A, QClass . IN )
# If the last character of "nim-lang.org" is not a '.', the initializer will
# add, as it is called the DNS root.
let msg = initMessage (header, @ [question])
# The initializer automatically changes `header.qdcount` to `1'u16`
let client = initDnsClient ()
var rmsg = waitFor dnsAsyncQuery (client, msg)
echo repr (rmsg)
Sie können den DNS-Client mit dem vom System verwendeten DNS-Resolver-Server initialisieren. Starten Sie dazu den Client mit initSystemDnsClient
.
import ndns
let client = initSystemDnsClient ()
echo resolveIpv4 (client, " nim-lang.org " )
https://rockcavera.github.io/nim-ndns/ndns.html