Como verificar um volume de ip para o dns reverso?

6

Existe uma maneira de verificar a reversão da verificação de DNS para cargas de IPs, eu tenho uma lista de IP que eu quero verificar?

Eu sei que você é capaz de fazer isso individualmente:

host <ip-address>

e

dig -x <ip-address>

Além disso, existe uma maneira de exportá-los?

    
por Yen Deng 17.08.2016 / 11:15

4 respostas

8

Você pode usar dig -x $IP_ADDRESS +short em um script assim:

#!/bin/bash
export LC_ALL=C
for item
do
 domain=$(dig -x "$item"  +short)
 if [ -n "$domain"  ] ;
 then
     echo "$domain"
 else
     echo "$item" result is NULL
 fi
done

Demonstração do uso de amostra (todos os endereços IP fornecidos como espaço separado):

$ ./reverse_dns_lookup.sh 8.8.8.8 74.125.193.94 151.101.193.69                 
google-public-dns-a.google.com.
ig-in-f94.1e100.net.
151.101.193.69 result is NULL

Como você pode ver, no último exemplo, nosso servidor DNS não encontrou domínio para o endereço IP que fornecemos. Nesse caso, podemos usar um servidor DNS diferente, por exemplo, open_dns com dig @208.67.220.220 $IP_ADDRESS +short

Na demonstração acima, os endereços IP são fornecidos na linha de comando, como ./reverse_dns_lookup.sh ADDRESS1 ADDRESS2 ADDRESS2 , mas você também pode usar um arquivo para isso, assim:

$ cat ip_addresses.txt |  xargs ./reverse_dns_lookup.sh                          <
google-public-dns-a.google.com.
resolver2.opendns.com.
192.30.253.112 result is NULL

Versão alternativa

Aqui está uma versão alternativa do script que imprime a seção AUTHORITY de dig's output. Isso pode ser muito melhor e mais confiável do que apenas +short versão. OBSERVAÇÃO: isso usa 8.8.8.8 , que é o DNS público do Google. Use um servidor diferente se achar necessário.

#!/bin/bash
export LC_ALL=C
for item
do
 domain=$(dig @8.8.8.8  -x "$item" +noall +authority +answer)
 if [ -n "$domain"  ] ;
 then
     echo "$domain"
 else
     echo "$item" result is NULL
 fi
done

Demo:

$ cat ip_addresses.txt |  xargs ./reverse_dns_lookup.sh 

; <<>> DiG 9.10.3-P4-Ubuntu <<>> @8.8.8.8 -x 8.8.8.8 +noall +authority +answer
; (1 server found)
;; global options: +cmd
8.8.8.8.in-addr.arpa.   21390   IN  PTR google-public-dns-a.google.com.

; <<>> DiG 9.10.3-P4-Ubuntu <<>> @8.8.8.8 -x 208.67.220.220 +noall +authority +answer
; (1 server found)
;; global options: +cmd
220.220.67.208.in-addr.arpa. 6674 IN    PTR resolver2.opendns.com.

; <<>> DiG 9.10.3-P4-Ubuntu <<>> @8.8.8.8 -x 192.30.253.112 +noall +authority +answer
; (1 server found)
;; global options: +cmd
253.30.192.in-addr.arpa. 10 IN  SOA ns1.p16.dynect.net. ops.github.com. 6 3600 600 604800 60
    
por Sergiy Kolodyazhnyy 17.08.2016 / 11:28
3

Aqui está um folheto rápido e sujo: Conteúdo do endereço IP:

$ cat ip-addresses.txt
    1.2.3.4
    1.1.1.1
    222.222.222.222
    23.12.34.56
    8.8.8.8
    208.67.222.220

Substitua txt pelo seu arquivo que contém endereços, separados por novas linhas:

$ cat ip-addresses.txt | xargs -I % bash -c 'echo "%:$(dig -x % +short)"' >> dig-output.txt

Se você anexar dig-output.txt como acima, o conteúdo desse arquivo será como abaixo, se a pesquisa inversa de DNS for bem-sucedida, IP:NAME , se não, IP:(NULL)

$ cat dig-output.txt
1.2.3.4:
1.1.1.1:
222.222.222.222:
23.12.34.56:a23-12-34-56.deploy.static.akamaitechnologies.com.
8.8.8.8:google-public-dns-a.google.com.
208.67.222.220:resolver3.opendns.com.

Se os endereços IP vierem de outro processo, você poderá canalizar diretamente para xargs.

Edit: Se você precisar de uma palavra como null (inspirada em @Serg) no caso de uma falha de pesquisa, você pode usar o comando abaixo:

$ cat ip-addresses.txt | xargs -I % bash -c '{ query=$(dig -x % +short); if [ -z $query ]; then query=null;fi; echo %:$query; }'
  • cat ip-addresses.txt # Imprime endereços IP para STDOUT . Se você não quiser cat do arquivo, poderá canalizar diretamente de outro processo como command | xargs ...
  • xargs -I % bash -c # Pegue cada linha da esquerda do pipe, use % como espaço reservado, execute o comando bash que segue dentro de aspas simples
  • dig do endereço IP que vem do marcador de posição % por xargs , atribua à variável query . Se o resultado for null (comprimento zero), atribua a palavra string 'null' à variável query , depois imprima como IP:result

Demo:

$ cat ip-addresses.txt | xargs -I % bash -c '{ query=$(dig -x % +short); if [ -z $query ]; then query=null;fi; echo %:$query; }'
1.2.3.4:null
1.1.1.1:null
222.222.222.222:null
23.12.34.56:a23-12-34-56.deploy.static.akamaitechnologies.com.
8.8.8.8:google-public-dns-a.google.com.
208.67.222.220:resolver3.opendns.com.
    
por sdkks 17.08.2016 / 13:21
1

Inspirado pelo exemplo de shell mostrado em outra resposta, eu decidi que uma versão Perl me adequava melhor, então eu criei este arquivo "batch_dns_by_ip.pl". Você coloca uma lista de endereços IP em um arquivo de texto que você irá enviar para o programa.

O código deve ficar assim e você vai querer tornar o arquivo executável:

#!/usr/bin/perl
use strict;
my @domains;
my $address;
while (<>)
{
        chomp;
        $address = $_;
        $address =~ s/ *//g;
        @domains = ();
        @domains='dig -x "$address" +short';
        chomp(@domains);
        if ("$domains[0]" eq "")
        {
                 $domains[0] = "NULL";
        }
        printf("addr: %15s names: %s", $address, $domains[0]);
        if ("$domains[1]" eq "")
        {
                print "\n";
        }
        else
        {
                printf(", %s\n", $domains[1]);
        }
}

Uma corrida pode ter esta aparência:

$ cat myips | ./batch_dns_by_ip.pl
addr:  216.58.219.238 names: lga25s41-in-f14.1e100.net., lga25s41-in-f238.1e100.net.
addr:  151.101.129.69 names: NULL
addr:         8.8.8.8 names: google-public-dns-a.google.com.
addr:     10.49.11.62 names: nyalbdnsvip01.miscny.nyenet., nyalbcwgbvip01-vlan401.miscny.nyenet.
addr:  69.172.201.153 names: NULL

Espero que ajude!

    
por James Ebersold 20.02.2018 / 21:43
0

nmap

Você pode apenas

 nmap -R -sL -Pn 1.2.3.0/24 | grep '('
  • -n/-R Nunca faça resolução de DNS / Sempre resolva [padrão: às vezes]
  • -sL List Scan - basta listar os alvos a serem verificados
  • -Pn Trate todos os hosts como on-line - ignore a descoberta de host. Remova isso para obter exatamente o que responder ao ping.

O grep deixa apenas o DNS reverso resolvido e algumas linhas úteis.

Adicione --dns-servers x.x.x.x para usar um servidor DNS específico.

    
por Pablo Bianchi 02.03.2018 / 16:18