Чистый клиент системы доменных имен Nim (DNS), реализованный с помощью dnsprotocol.
Эта реализация имеет синхронные и асинхронные (асинхронные) процедуры (procs) для передачи данных через Интернет с использованием протоколов UDP и TCP.
nimble install ndns
или
nimble install https://github.com/rockcavera/nim-ndns.git
Разрешение адресов IPv4 для nim-lang.org ( не асинхронно ):
import ndns
let client = initDnsClient ()
echo resolveIpv4 (client, " nim-lang.org " )
Разрешение адресов IPv4 для nim-lang.org ( async ):
import asyncdispatch, ndns
let client = initDnsClient ()
echo waitFor asyncResolveIpv4 (client, " nim-lang.org " )
Реальный пример асинхронного выполнения см. в файлеsolver.nim. В этом примере я оставил как можно больше комментариев, даже если они выглядят глупо. Я думаю, что это может кому-то помочь, поскольку аналогичный пример я предоставил в частном порядке новичку в Ниме. Его также можно скомпилировать с помощью -d:showLoopLog
чтобы показать асинхронный рабочий процесс.
Создание объекта Message
с запросом QType.A
для доменного имени nim-lang.org, передача Message
и получение ответа ( не асинхронного ):
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)
Создание объекта Message
с помощью запроса QType.A
для доменного имени nim-lang.org, передача Message
и получение ответа ( 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)
Вы можете инициализировать DNS-клиент с помощью сервера DNS-преобразователя, используемого системой. Для этого запустите клиент с помощью initSystemDnsClient
.
import ndns
let client = initSystemDnsClient ()
echo resolveIpv4 (client, " nim-lang.org " )
https://rockcavera.github.io/nim-ndns/ndns.html