Un pur client Nim Domain Name System (DNS) implémenté avec dnsprotocol.
Cette implémentation dispose de procédures (procs) synchrones et asynchrones (async) pour transmettre des données sur Internet, en utilisant à la fois les protocoles UDP et TCP.
nimble install ndns
ou
nimble install https://github.com/rockcavera/nim-ndns.git
Résolution des adresses IPv4 pour nim-lang.org ( pas async ) :
import ndns
let client = initDnsClient ()
echo resolveIpv4 (client, " nim-lang.org " )
Résolution des adresses IPv4 pour nim-lang.org ( async ) :
import asyncdispatch, ndns
let client = initDnsClient ()
echo waitFor asyncResolveIpv4 (client, " nim-lang.org " )
Pour un exemple asynchrone « réel », voir solver.nim. Dans cet exemple, j'ai fait autant de commentaires que possible, même s'ils semblent idiots. Je pense que cela pourrait aider quelqu'un, comme un exemple similaire que j'ai donné en privé à un nouveau venu à Nim. Il peut également être compilé avec -d:showLoopLog
pour afficher le flux de travail asynchrone.
Création d'un objet Message
avec une requête QType.A
pour le nom de domaine nim-lang.org, transmission du Message
et réception de la réponse ( non asynchrone ) :
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)
Création d'un objet Message
avec une requête QType.A
pour le nom de domaine nim-lang.org, transmission du Message
et réception de la réponse ( 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)
Vous pouvez initialiser le client DNS avec le serveur de résolution DNS utilisé par le système. Pour ce faire, démarrez le client avec initSystemDnsClient
.
import ndns
let client = initSystemDnsClient ()
echo resolveIpv4 (client, " nim-lang.org " )
https://rockcavera.github.io/nim-ndns/ndns.html