O que é o utilitário de linha de comando DNS reverso?


Respostas:


56

dig e host deve ser o que você está procurando;)

http://www.unix.com/unix-dummies-questions-answers/9866-nslookup-linux.html

No sistema * nix, você pode executar este comando: dig -x [address]

Como alternativa, você pode adicionar +shortno final do digcomando a saída apenas do resultado do DNS.

No Windows , usenslookup

EDIT: nslookup também funciona em sistemas * nix. Mais informações sobre o comando nslookup se ele parece ter sido substituído há algum tempo: http://linuxreviews.org/man/nslookup/


A mesma sintaxe também funciona com o drillutilitário ldns, ou seja,drill -x 123.123.123.123
Tullo_x86

53

No * nix, você pode usar:

dig -x [address]

16
Definitivamente, essa parece ser a maneira mais fácil. Adicione + short no final para retornar apenas o resultado de rdns. dig -x [address] +short
ColinM

3
Essa +shortbandeira é realmente útil!
Neil

Isso funciona com endereços IPv6?
Geremia

@ColinM Bom ponto. Eu editei minha resposta com base nisso. Obrigado!
Marc-Andre R.

Sim, @Geremia, de acordo com man dig, O endereço é um endereço IPv4 em notação decimal com pontos, ou um endereço IPv6 delimitado por dois pontos.
Ricardo

8

Na maioria dos sistemas Linux que eu conheço, você pode usar:

 nslookup <ip-number EX: 127.0.0.1>

funcionará na linha de comando.

Pense bem, o nslookup não está disponível no Windows XP?


Sim, de fato. E nas versões anteriores do Windows.
Kubanczyk 01/07/2009

4

Esta pergunta já tem um milhão de respostas, mas vou adicionar outra. Aqui está uma pequena função que escrevi para fazer facilmente o DNS reverso com o dig. Adicione isso ao seu ~/.bashrcarquivo, recarregue seu shell e, em seguida, você poderá fazer pesquisas inversas de DNS com revdns 1.2.3.4:

function revdns() {
    octets=""
    addr="in-addr.arpa"

    # split the IP address into an array of octets
    IFS="." read -r -a octets <<< "$1"

    # add each octet to our $addr string in reverse order
    for octet in "${octets[@]}"; do
         addr=$octet"."$addr
    done

    # run a DNS pointer lookup with dig
    # `+short` makes dig's output very terse (un-verbose)
    # `"${@:2}"` passes any extra params from this command to dig
    dig ptr +short $addr "${@:2}"
}

As pesquisas reversas de DNS são feitas verificando os registros do ponteiro (PTR). Se você deseja reverter o DNS para "1.2.3.4", é necessário procurar registros de ponteiro para "4.3.2.1.in-addr.arpa". Minha função pega um endereço IP, inverte a ordem dos octetos (ou seja, altera-o de 1.2.3.4 para 4.3.2.1) e depois usa digpara executar a pesquisa PTR que acabei de descrever.

Você pode, é claro, usar apenas nslookup 1.2.3.4se a tiver, mas eu prefiro essa solução baseada em escavação porque ela usa os servidores DNS do sistema operacional em vez dos fornecidos pela nslookup (se você quiser, a propósito, pode adicionar outros sinalizadores de escavação) quando você ligar revdns, e eles serão passados ​​para cavar)


De acordo com sua ajuda, dig -x dot-notationestá o "atalho para pesquisas reversas". Eu queria saber qual seria a versão longa. Obrigado por explicar! :)
webwurst

from man dig: Quando o -x é usado, não há necessidade de fornecer os argumentos de nome, classe e tipo. O dig executa automaticamente uma pesquisa por um nome como 94.2.0.192.in-addr.arpa e define o tipo e a classe de consulta como PTR e IN, respectivamente.
Ricardo

3

Estou ciente de que dig / host / nslookup são as ferramentas padrão para isso, mas eu as mantenho disponíveis para testar a resolução do sistema operacional (essencialmente, para testar se o nsswitch.conf está funcionando corretamente):

gethostbyname:

#!/usr/bin/perl

use Socket;

my @t = gethostbyname($ARGV[0]);
print "\$name     = $t[0]\n"; shift(@t);
print "\$aliases  = $t[0]\n"; shift(@t);
print "\$addrtype = $t[0]\n"; shift(@t);
print "\$length   = $t[0]\n"; shift(@t);

foreach (@t) {
  print "          = ", inet_ntoa($_), "\n";
}

gethostbyaddr:

#!/usr/bin/perl

use Socket;

my @t = gethostbyaddr(inet_aton($ARGV[0]), AF_INET);
print "\$name     = $t[0]\n"; shift(@t);
print "\$aliases  = $t[0]\n"; shift(@t);
print "\$addrtype = $t[0]\n"; shift(@t);
print "\$length   = $t[0]\n"; shift(@t);

foreach (@t) {
  print "          = ", inet_ntoa($_), "\n";
}

exemplo:

g3 0 /home/jj33/swap > gethostbyname www.google.com
$name     = www.l.google.com
$aliases  = www.google.com
$addrtype = 2
$length   = 4
          = 72.14.205.147
          = 72.14.205.103
          = 72.14.205.104
          = 72.14.205.99
g3 0 /home/jj33/swap > gethostbyaddr 72.14.205.147 
$name     = qb-in-f147.google.com
$aliases  = 
$addrtype = 2
$length   = 4
          = 72.14.205.147

4
você pode fazer "hosts getent [IP ou hostname]"
hayalci

Hmmm ... eu escrevi as ferramentas originalmente apenas para brincar com as funções, então não há perda por lá, mas certamente não as teria colado na falha do servidor se soubesse sobre a ferramenta getent. Obrigado pelo ponteiro.
jj33

-1: eles estão limitados ao IPv4, gethostbyname não recupera endereços IPv6 quando eles existem e gethostbyaddr não aceita endereços IPv6.
Bortzmeyer

Essas funções são muitos anos obsoletas. Eles estavam até obsoletos quando isso foi escrito. No perl e na maioria dos outros idiomas, você deve usar getaddrinfo e getnameinfo.
Michael Hampton

3

No Windows, adquiri o hábito de usar:

ping -a <ip address>

pois isso também refletirá os dados do seu hostsarquivo e WINS e assim por diante.


3

Tente "host"

  • Pesquisa direta com host:

    $ host google-public-dns-b.google.com.
    google-public-dns-b.google.com has address 8.8.4.4
    google-public-dns-b.google.com has IPv6 address 2001:4860:4860::8844
    
  • Pesquisa inversa com host:

    $ host 8.8.4.4
    4.4.8.8.in-addr.arpa domain name pointer google-public-dns-b.google.com.
    

Semelhante a cavar

  • Pesquisa direta com dig:

    $ dig google-public-dns-b.google.com. +short
    8.8.4.4
    
  • Pesquisa inversa com dig:

    $ dig -x 8.8.4.4 +short
    google-public-dns-b.google.com.
    

1

Se você estiver usando o nslookup, é este (assumindo 192.168.0.1 como o IP em questão)

> set type=ptr
> 1.0.168.192.in-addr.arpa

EDIT: Lembre - se de que uma pesquisa inversa só funciona se houver um registro PTR criado para o IP e não é garantido o retorno do nome do host que você está procurando. Depende completamente de como o DNS está configurado e mantido na sua situação.


5
O nsloookup não é mais mantido e seus autores recomendam dig. Além disso, dig -x é muito mais simples do que inverter os bytes você mesmo.
22449 bortzmeyer

É bom saber, muito obrigado pela contribuição! Velhos hábitos custam a morrer;)
squillman

1

Powershell:

[net.dns]::gethostentry("69.59.196.212").HostName

0

Bem, uma pessoa amigável que acabou de escrever nslookup é o comando, e ele está certo. Funciona em Unix e Windows. Não sei por que você excluiu sua resposta, mas está correto, senhor.


err, talvez não.
11139 Peter Turner

Sim, bem, eu fiz postar um pouco rápido, e depois de um cheque que eu não tinha certeza de nada da minha resposta, eu só colocar de volta o meu post e editá-lo para adicionar mais detalhes;)
Marc-Andre R.

OK, é, mas não estou aceitando essa resposta. Pena que não podemos obter o Googley AJAX em tempo real aqui.
11359 Peter Turner

lol sim bem, não podemos ter tudo;) Tenha um bom dia, espero ajudá-lo;)
Marc-Andre R.

0

Prefiro a digitação da linha de comando para Windows (disponível aqui: http://members.shaw.ca/nicholas.fong/dig/ ) a nslookup a qualquer dia.

Se você precisar testar / administrar o DNS de uma estação de trabalho Windows, pegue esta ferramenta. Então:

C:\dig>dig -x <IP Address>

... lembre-se de adicionar c: \ dig ao seu caminho!


0

Ela é minha opinião sobre uma pesquisa inversa de DNS mais completa. Espero que isso seja útil para futuros espectadores desta página.

for ip in {1..254..1}; do dig -x 1.1.1.$ip | grep $ip >> dns.txt; done;

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.