Um cliente Nim Domain Name System (DNS) puro implementado com dnsprotocol.
Esta implementação possui procedimentos (procs) síncronos e assíncronos (assíncronos) para transmissão de dados pela internet, utilizando protocolo UDP e TCP.
nimble install ndns
ou
nimble install https://github.com/rockcavera/nim-ndns.git
Resolvendo endereços IPv4 para nim-lang.org ( não async ):
import ndns
let client = initDnsClient ()
echo resolveIpv4 (client, " nim-lang.org " )
Resolvendo endereços IPv4 para nim-lang.org ( async ):
import asyncdispatch, ndns
let client = initDnsClient ()
echo waitFor asyncResolveIpv4 (client, " nim-lang.org " )
Para um exemplo assíncrono da "vida real", consulte resolver.nim. Neste exemplo fiz tantos comentários quanto possível, mesmo que pareçam bobos. Acho que pode ajudar alguém, como exemplo semelhante que forneci em particular para um recém-chegado a Nim. Também pode ser compilado com -d:showLoopLog
para mostrar o fluxo de trabalho assíncrono.
Criando um objeto Message
com uma consulta QType.A
para o nome de domínio nim-lang.org, transmitindo a Message
e recebendo a resposta ( não assí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)
Criando um objeto Message
com uma consulta QType.A
para o nome de domínio nim-lang.org, transmitindo a Message
e recebendo a resposta ( 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)
Você pode inicializar o cliente DNS com o servidor resolvedor DNS usado pelo sistema. Para fazer isso, inicie o cliente com initSystemDnsClient
.
import ndns
let client = initSystemDnsClient ()
echo resolveIpv4 (client, " nim-lang.org " )
https://rockcavera.github.io/nim-ndns/ndns.html