Un cliente de Sistema de nombres de dominio (DNS) Nim puro implementado con dnsprotocol.
Esta implementación tiene procedimientos (procs) sincrónicos y asincrónicos (asincrónicos) para transmitir datos a través de Internet, utilizando el protocolo UDP y TCP.
nimble install ndns
o
nimble install https://github.com/rockcavera/nim-ndns.git
Resolución de direcciones IPv4 para nim-lang.org ( no asíncrono ):
import ndns
let client = initDnsClient ()
echo resolveIpv4 (client, " nim-lang.org " )
Resolución de direcciones IPv4 para nim-lang.org ( async ):
import asyncdispatch, ndns
let client = initDnsClient ()
echo waitFor asyncResolveIpv4 (client, " nim-lang.org " )
Para ver un ejemplo asíncrono de la "vida real", consulte resolver.nim. En este ejemplo he hecho tantos comentarios como he podido, aunque parezcan tontos. Creo que podría ayudar a alguien, como un ejemplo similar que proporcioné en privado a un recién llegado a Nim. También se puede compilar con -d:showLoopLog
para mostrar el flujo de trabajo asíncrono.
Crear un objeto Message
con una consulta QType.A
para el nombre de dominio nim-lang.org, transmitir el Message
y recibir la respuesta ( no asíncrona ):
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)
Crear un objeto Message
con una consulta QType.A
para el nombre de dominio nim-lang.org, transmitir el Message
y recibir la respuesta ( async ):
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)
Puede inicializar el cliente DNS con el servidor de resolución DNS utilizado por el sistema. Para hacer esto, inicie el cliente con initSystemDnsClient
.
import ndns
let client = initSystemDnsClient ()
echo resolveIpv4 (client, " nim-lang.org " )
https://rockcavera.github.io/nim-ndns/ndns.html