Voltar às atualizações
New releaseJul 21, 2026

dnsdiag v2.9.4

Conjunto de ferramentas de medição, solução de problemas e auditoria de segurança de DNS

Compartilhar

PyPI PyPI Downloads Downloads PyPI Docker Pulls GitHub stars

Conjunto de Ferramentas para Medição, Diagnóstico e Auditoria de Segurança de DNS

Você já se perguntou se seu ISP está interceptando seu tráfego DNS? Notou algum comportamento incomum nas respostas DNS, ou foi redirecionado para o endereço errado e suspeitou que algo estivesse errado com seu DNS? Oferecemos um conjunto de ferramentas para realizar auditorias básicas em suas consultas e respostas DNS, ajudando você a garantir que seu DNS esteja funcionando conforme o esperado.

Com o dnsping, você pode medir o tempo de resposta de qualquer servidor DNS para consultas arbitrárias. Similar ao utilitário ping tradicional, o dnsping oferece funcionalidade comparável para requisições DNS, ajudando a monitorar a capacidade de resposta do servidor.

Você também pode rastrear a rota da sua requisição DNS até seu destino usando o dnstraceroute, verificando se ela não está sendo redirecionada ou interceptada. Ao comparar consultas DNS enviadas ao mesmo servidor, o dnstraceroute permite observar quaisquer diferenças nos caminhos percorridos, alertando-o sobre possíveis problemas.

O dnseval avalia múltiplos resolvedores DNS para ajudá-lo a escolher o melhor resolvedor DNS para sua rede. Embora seja recomendado usar seu próprio resolvedor DNS para evitar dependência de resolvedores terceiros, o dnseval pode auxiliar na seleção do resolvedor DNS ideal quando necessário. Ele permite comparar servidores DNS com base em desempenho (latência) e confiabilidade (perda de pacotes), fornecendo uma visão abrangente para tomada de decisões informadas.

Instalação

Existem várias formas de usar este conjunto de ferramentas, embora recomendamos executá-lo diretamente a partir do código fonte para maior flexibilidade e controle.

Código Fonte

  1. Clone o repositório git e instale as dependências:
git clone https://github.com/farrokhi/dnsdiag.git
cd dnsdiag
pip3 install -r requirements.txt
  1. Alternativamente, você pode instalar o pacote usando pip:
pip3 install dnsdiag

Usando uv (Recomendado)

uv é um gerenciador de pacotes Python rápido que pode executar ferramentas diretamente sem instalação:

# Executar dnsping diretamente sem instalação
uvx --from dnsdiag dnsping google.com

# Executar com opções específicas
uvx --from dnsdiag dnsping -c 5 --tls -s 8.8.8.8 example.com

# Executar dnstraceroute
uvx --from dnsdiag dnstraceroute cloudflare.com

# Executar dnseval
uvx --from dnsdiag dnseval -f public-servers.txt github.com

Para instalar o dnsdiag permanentemente:

# Instalar ferramentas dnsdiag
uv tool install dnsdiag

# Atualizar para a versão mais recente
uv tool upgrade dnsdiag

Pacote Binário

De tempos em tempos, pacotes binários serão lançados para Windows, Mac OS X e Linux. Você pode obter a versão mais recente na página de releases.

Plataformas Suportadas

Binários pré-compilados estão disponíveis para:

  • Linux (x86_64, ARM64)
  • macOS (Intel, Apple Silicon)
  • Windows (x86_64)

Windows ARM64 não é suportado atualmente devido a dependências de compilação que exigem toolchains de compilação nativos não prontamente disponíveis. Se você estiver usando Windows em ARM, pode executar o dnsdiag usando o Subsistema Windows para Linux (WSL2) ou instalar diretamente a partir do código fonte.

Docker

Se preferir não instalar o dnsdiag em sua máquina local, você pode usar a imagem Docker para executar as ferramentas em um ambiente containerizado. Por exemplo:

docker run --network host -it --rm farrokhi/dnsdiag dnsping.py

dnsping

O dnsping permite que você "pingue" um resolvedor DNS enviando uma consulta DNS arbitrária várias vezes. Para uma lista completa de opções de linha de comando suportadas, use --help. Aqui estão algumas flags principais:

  • Use --tcp, --tls, --doh, --quic ou --http3 para selecionar o protocolo de transporte (o padrão é UDP). Essas opções são mutuamente exclusivas; apenas um protocolo pode ser especificado por comando.
  • Use --flags para exibir flags de resposta, incluindo flags EDNS, para cada resposta.
  • Use --dnssec para solicitar validação DNSSEC, se disponível.
  • Mensagens de Erro DNS Estendido (RFC 8914) são exibidas automaticamente quando presentes.
  • Use --nsid para exibir o Identificador do Servidor de Nomes (NSID) se disponível (RFC 5001).
  • Use --ecs para incluir informações de Sub-rede do Cliente EDNS para otimização de roteamento geográfico.
  • Use --cookie para exibir cookies DNS (RFC 7873) quando presentes nas respostas.
./dnsping.py -c 5 --dnssec --flags --tls -t AAAA -s 8.8.8.8 brokendnssec.net
dnsping.py DNS: 8.8.8.8:853, hostname: brokendnssec.net, proto: TLS, class: IN, type: AAAA, flags: [RD]
75  bytes from 8.8.8.8: seq=1   time=73.703 ms  SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75  bytes from 8.8.8.8: seq=2   time=69.523 ms  SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75  bytes from 8.8.8.8: seq=3   time=58.058 ms  SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75  bytes from 8.8.8.8: seq=4   time=54.235 ms  SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75  bytes from 8.8.8.8: seq=5   time=57.806 ms  SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]

--- 8.8.8.8 dnsping statistics ---
5 requests transmitted, 5 responses received, 0% lost
min=54.235 ms, avg=22.665 ms, max=69.523 ms, stddev=38.202 ms

O dnsping também fornece estatísticas como tempos mínimo, máximo e médio de resposta, juntamente com jitter (desvio padrão) e perda de pacotes.

Aqui estão alguns casos de uso interessantes para o dnsping:

  • Comparar tempos de resposta entre diferentes protocolos de transporte (ex.: UDP vs. DoH).
  • Avaliar a confiabilidade do seu servidor DNS medindo jitter e perda de pacotes.
  • Medir tempos de resposta com DNSSEC ativado usando a flag --dnssec.
  • Testar o comportamento do EDNS Client Subnet para respostas com reconhecimento geográfico:
./dnsping.py -c 3 --ecs 203.0.113.0/24 -s 94.140.14.14 google.com
dnsping.py DNS: 94.140.14.14:53, hostname: google.com, proto: UDP, class: IN, type: A, flags: [RD]
66  bytes from 94.140.14.14: seq=1   time=31.407 ms  NOERROR [ECS:203.0.113.0/24/24]
66  bytes from 94.140.14.14: seq=2   time=29.156 ms  NOERROR [ECS:203.0.113.0/24/24]
66  bytes from 94.140.14.14: seq=3   time=30.892 ms  NOERROR [ECS:203.0.113.0/24/24]

--- 94.140.14.14 dnsping statistics ---
3 requests transmitted, 3 responses received, 0% lost
min=29.156 ms, avg=30.485 ms, max=31.407 ms, stddev=1.176 ms
  • Identificar servidores DNS usando a opção NSID:
./dnsping.py -c 2 --nsid -s 8.8.8.8 google.com
dnsping.py DNS: 8.8.8.8:53, hostname: google.com, proto: UDP, class: IN, type: A, flags: [RD]
68  bytes from 8.8.8.8: seq=1   time=36.399 ms  NOERROR [NSID:gpdns-ams]
68  bytes from 8.8.8.8: seq=2   time=32.156 ms  NOERROR [NSID:gpdns-ams]

--- 8.8.8.8 dnsping statistics ---
2 requests transmitted, 2 responses received, 0% lost
min=32.156 ms, avg=34.278 ms, max=36.399 ms, stddev=2.122 ms
  • Testar cookies DNS para segurança aprimorada e otimização de cache:
./dnsping.py -c 2 --cookie -s anyns.pch.net quad9.net
dnsping.py DNS: anyns.pch.net:53, hostname: quad9.net, proto: UDP, class: IN, type: A, flags: [RD]
82  bytes from anyns.pch.net: seq=1   time=30.552  ms  NOERROR [COOKIE:27f609c017bb2ec4ea70de5c68eec3fc39f6a53ee49c55f8]
82  bytes from anyns.pch.net: seq=2   time=24.794  ms  NOERROR [COOKIE:719631dd9fcce722d3ac859b68eec3fd2e5430b5c8a7f8cf]

--- anyns.pch.net dnsping statistics ---
2 requests transmitted, 2 responses received, 0% lost
min=24.794 ms, avg=27.673 ms, max=30.552 ms, stddev=4.072 ms

Interpretando Flags Relacionadas a DNSSEC e Segurança

Ao usar --dnssec e --flags, o dnsping expõe campos do protocolo DNS que são diretamente relevantes para a validação de segurança DNS. Esses valores indicam se um resolvedor é capaz de validar DNSSEC e se uma resposta foi verificada com sucesso.

Flags comuns:

  • DO (DNSSEC OK)
    Indica que o cliente está solicitando registros relacionados a DNSSEC. Sua presença mostra que o resolvedor suporta consultas DNSSEC.

  • AD (Authenticated Data)
    Definido por resolvedores validadores quando a resposta foi criptograficamente validada usando DNSSEC. É um sinal forte de que a validação DNSSEC está ativa e bem-sucedida.

Padrões típicos:

ResultadoSignificado
NOERROR com flag ADValidação DNSSEC bem-sucedida
SERVFAIL com flag DOFalha na validação DNSSEC (geralmente devido a assinaturas quebradas ou configuração incorreta)
Nenhum flag AD presenteO resolvedor não está realizando validação DNSSEC

Os Erros DNS Estendidos (EDE, RFC 8914) fornecem informações diagnósticas adicionais quando a validação DNSSEC falha. Por exemplo:

  • EDE:10DNSSEC Inválido (dados DNSSEC inválidos ou quebrados)
  • EDE:6Assinatura DNSSEC Expirada
  • EDE:7Assinatura DNSSEC Ainda Não Válida

Esses indicadores tornam o dnsping útil não apenas para testes de desempenho, mas também para validar se os resolvedores aplicam corretamente o DNSSEC e para diagnosticar problemas de implantação do DNSSEC.

dnstraceroute

O dnstraceroute é um utilitário que rastreia o caminho das suas requisições DNS até o destino. Você pode querer comparar isso com o traceroute real da sua rede para garantir que seu tráfego DNS não está sendo roteado por caminhos indesejados.

O dnstraceroute suporta múltiplos protocolos de transporte (mutuamente exclusivos):

  • UDP (padrão) - Consultas DNS tradicionais
  • TCP (--tcp) - DNS sobre TCP
  • DoQ (--quic) - DNS sobre QUIC (suportado pelo AdGuard DNS)
  • DoH3 (--http3) - DNS sobre HTTP/3 (suportado pelo Google DNS e Cloudflare)
./dnstraceroute.py --expert --asn -C -t A -s 8.8.4.4 facebook.com

Você também pode testar protocolos DNS modernos:

# Testar DNS sobre QUIC com AdGuard DNS
./dnstraceroute.py --quic -s 94.140.14.14 -c 3 google.com

# Testar DNS sobre HTTP/3 com Google DNS
./dnstraceroute.py --http3 -s 8.8.8.8 -c 3 google.com
dnstraceroute.py DNS: 8.8.4.4:53, hostname: facebook.com, rdatatype: A
1	192.168.0.1 (192.168.0.1) 1 ms
2	192.168.28.177 (192.168.28.177) 4 ms
3	192.168.0.1 (192.168.0.1) 693 ms
4	172.19.4.17 (172.19.4.17) 3 ms
5	dns.google (8.8.4.4) [AS15169 GOOGLE, US] 8 ms

=== Expert Hints ===
 [*] public DNS server is next to a private IP address (possible hijacking)

Usar a flag --expert com o dnstraceroute ativará a exibição de dicas de especialista, incluindo avisos sobre possível sequestro de tráfego DNS.

dnseval

O dnseval é um utilitário de ping em massa que envia consultas DNS arbitrárias para uma lista especificada de servidores DNS, permitindo comparar seus tempos de resposta simultaneamente.

Você pode usar o dnseval para avaliar tempos de resposta em diferentes protocolos de transporte, incluindo UDP (padrão), TCP, DoT (DNS sobre TLS), DoH (DNS sobre HTTPS), DoQ (DNS sobre QUIC) e DoH3 (DNS sobre HTTP/3) usando as flags --tcp, --tls, --doh, --quic e --http3, respectivamente. Essas opções de protocolo são mutuamente exclusivas; apenas uma pode ser especificada por comando.

Resumo de Suporte a Protocolos

FerramentaUDPTCPTLS (DoT)DoHDoQDoH3
dnsping
dnstraceroute--
dnseval

DoQ: DNS sobre QUIC, DoH3: DNS sobre HTTP/3

./dnseval.py --skip-warmup --dnssec -c10 -f public-servers.txt ripe.net
server                   avg(ms)  min(ms)  max(ms)  stddev(ms)  lost(%)  ttl      flags                      response
---------------------------------------------------------------------------------------------------------------------
1.0.0.1                  29.01    14.15    45.36    8.60        %0       300      QR -- -- RD RA AD -- DO     NOERROR
1.1.1.1                  23.90    18.14    42.07    7.83        %0       300      QR -- -- RD RA AD -- DO     NOERROR
1.0.0.2                  25.90    21.36    31.58    4.26        %0       300      QR -- -- RD RA AD -- DO     NOERROR
1.1.1.2                  22.68    18.36    32.15    3.96        %0       300      QR -- -- RD RA AD -- DO     NOERROR
1.0.0.3                  22.53    18.98    32.52    3.94        %0       300      QR -- -- RD RA AD -- DO     NOERROR
1.1.1.3                  21.70    20.25    22.97    0.77        %0       299      QR -- -- RD RA AD -- DO     NOERROR
2606:4700:4700::1001     21.70    19.13    27.50    2.28        %0       299      QR -- -- RD RA AD -- DO     NOERROR
2606:4700:4700::1111     22.63    20.42    30.18    3.13        %0       299      QR -- -- RD RA AD -- DO     NOERROR
2606:4700:4700::1002     24.97    20.89    44.63    7.16        %0       299      QR -- -- RD RA AD -- DO     NOERROR
2606:4700:4700::1112     23.24    21.37    25.87    1.48        %0       298      QR -- -- RD RA AD -- DO     NOERROR
2606:4700:4700::1003     21.68    19.28    24.88    1.65        %0       298      QR -- -- RD RA AD -- DO     NOERROR
2606:4700:4700::1113     22.61    19.86    26.09    1.73        %0       299      QR -- -- RD RA AD -- DO     NOERROR
195.46.39.39             25.56    16.42    55.37    15.37       %0       300      QR -- -- RD RA -- -- --     NOERROR
195.46.39.40             19.08    16.51    23.86    2.24        %0       300      QR -- -- RD RA -- -- --     NOERROR
2a05:d014:939:3300::39   0.00     0.00     0.00     0.00        %100     N/A      -- -- -- -- -- -- -- --     No Response
2a05:d014:939:3300::40   0.00     0.00     0.00     0.00        %100     N/A      -- -- -- -- -- -- -- --     No Response
208.67.220.220           30.60    14.54    120.64   31.88       %0       300      QR -- -- RD RA AD -- DO     NOERROR
208.67.222.222           21.78    17.42    36.45    6.06        %0       50       QR -- -- RD RA AD -- DO     NOERROR
2620:0:ccc::2            29.48    19.23    98.29    24.22       %0       299      QR -- -- RD RA AD -- DO     NOERROR
2620:0:ccd::2            22.36    17.90    30.18    3.98        %0       299      QR -- -- RD RA AD -- DO     NOERROR
216.146.35.35            172.53   114.46   360.87   71.47       %0       299      QR -- -- RD RA AD -- DO     NOERROR
216.146.36.36            187.36   118.21   324.32   59.08       %0       110      QR -- -- RD RA AD -- DO     NOERROR
209.244.0.3              46.49    25.23    115.86   28.19       %0       300      QR -- -- RD RA -- -- DO     NOERROR
209.244.0.4              58.33    28.09    109.18   29.20       %0       299      QR -- -- RD RA -- -- DO     NOERROR
4.2.2.1                  64.58    30.21    86.79    30.19       %25      299      QR -- -- RD RA -- -- DO     NOERROR
4.2.2.2                  40.54    22.69    74.80    20.76       %0       70       QR -- -- RD RA -- -- DO     NOERROR
4.2.2.3                  90.62    90.62    90.62    0.00        %50      70       QR -- -- RD RA -- -- DO     NOERROR
4.2.2.4                  31.53    23.80    70.93    14.51       %0       294      QR -- -- RD RA -- -- DO     NOERROR
4.2.2.5                  24.11    24.05    24.18    0.09        %33      294      QR -- -- RD RA -- -- DO     NOERROR
80.80.80.80              0.00     0.00     0.00     0.00        %100     N/A      -- -- -- -- -- -- -- --     No Response
80.80.81.81              0.00     0.00     0.00     0.00        %100     N/A      -- -- -- -- -- -- -- --     No Response
8.8.4.4                  28.35    20.85    39.14    7.24        %0       300      QR -- -- RD RA AD -- DO     NOERROR
8.8.8.8                  21.22    16.22    24.93    2.39        %0       299      QR -- -- RD RA AD -- DO     NOERROR

Você também pode salvar os resultados no formato JSONL para processamento posterior. Cada linha no arquivo de saída é um objeto JSON válido contendo os resultados completos da medição para um servidor DNS.

./dnseval.py -c 5 -j results.jsonl -f public-servers.txt example.com

A saída pode ser analisada linha por linha com ferramentas JSON padrão, como jq.

cat results.jsonl | jq -r 'select(.data.r_lost_percent == 0) | .data.resolver'

Autor

Babak Farrokhi

Licença

O dnsdiag é distribuído sob uma licença BSD de 2 cláusulas.

Categorias