web-dev-qa-db-fra.com

Comment vérifier un gros d'IP pour les DNS inversés?

Existe-t-il un moyen de vérifier l'inversion de la vérification DNS pour les charges d'adresses IP? J'ai une liste d'adresses IP à vérifier?

Je sais que vous êtes capable de faire ces choses individuellement:

Host <ip-address>

et

Dig -x <ip-address>

Aussi, y a-t-il un moyen de les exporter?

6
Yen Deng

xargsfournit un optin --arg-file. Avec l'option -L1 pour traiter chaque ligne en argument, la commande la plus simple que nous puissions faire est la suivante

$ xargs -L1 --arg-file=ip-addr.txt Dig +short -x
google-public-dns-a.google.com.
resolver2.opendns.com.

S'il est nécessaire d'afficher l'adresse IP à côté du domaine résolu, nous pouvons également faire:

$ xargs -L1 --arg-file=ip-addr.txt sh -c 'printf "%s: " "$1"; Dig +short -x "$1"' sh
8.8.8.8: google-public-dns-a.google.com.
208.67.220.220: resolver2.opendns.com.

Bien entendu, xargsest un processus supplémentaire. Et si nous voulions utiliser uniquement Shell et Digname__? À partir de la version 4 de bash, nous pouvons utiliser mapfileou readarraypour obtenir les lignes du fichier texte dans un tableau, puis traiter les éléments dans une boucle:

$ mapfile -t -d $'\n' < ip-addr.txt
$ for i in "${MAPFILE[@]}" ; do printf "%s:" "$i"; Dig +short -x "$i"; done
8.8.8.8:google-public-dns-a.google.com.
208.67.220.220:resolver2.opendns.com.

Si les adresses IP sont peu nombreuses et ne nécessitent pas un fichier texte long, POSIXly pourrait utiliser setpour définir des valeurs en tant que paramètres de position:

$ set -- 8.8.8.8 208.67.220.220
$ for i ; do printf "%s:" "$i"; Dig +short -x "$i"; done
8.8.8.8:google-public-dns-a.google.com.
208.67.220.220:resolver2.opendns.com.

Nous pouvons aussi utiliser Dig -x $IP_ADDRESS +short dans un script comme ceci:

#!/bin/bash
export LC_ALL=C
# without specifying 'in' part, bourne-like shells default
# to iterating over positional parameters
for item
do
     domain=$(Dig -x "$item"  +short)
     # this logic can also be reversed with
     # [ "x$domain" = "x" ] && echo "empty" || echo "$domain"
     if [ -n "$domain"  ] ;
     then
         echo "$domain"
     else
         echo "$item" result is NULL
     fi
done

Démo de l’utilisation de l’échantillon (toutes les adresses IP sont séparées par un espace):

$ ./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

Comme vous pouvez le constater, dans le dernier exemple, notre serveur DNS n'a pas trouvé de domaine pour l'adresse IP que nous lui avons fournie. Dans ce cas, nous pouvons utiliser un serveur DNS différent, par exemple open_dns avec Dig @208.67.220.220 $IP_ADDRESS +short

Dans la démo ci-dessus, les adresses IP sont fournies en ligne de commande, comme ./reverse_dns_lookup.sh ADDRESS1 ADDRESS2 ADDRESS2, mais vous pouvez également utiliser un fichier pour cela, comme suit:

$ 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

Version alternative du script:

Voici une version alternative du script qui imprime la section AUTHORITY à partir de la sortie de Dig's. Cela peut être bien meilleur et plus fiable que la version +short. REMARQUE: ceci utilise 8.8.8.8, qui est le DNS public de Google. Utilisez un autre serveur si vous le jugez nécessaire.

#!/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

Démo:

$ 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
9
Sergiy Kolodyazhnyy

Voici une ligne rapide et sale: Contenu du fichier ip-address.txt:

$ 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

Remplacez txt par votre fichier qui contient des adresses, séparées par des nouvelles lignes:

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

Si vous ajoutez à Dig-output.txt comme ci-dessus, le contenu de ce fichier sera comme ci-dessous. Si la recherche DNS inversée aboutit, IP:NAME, sinon, 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.

Si les adresses IP proviennent d'un autre processus, vous pouvez directement diriger vers xargs.

Éditer: Si vous devez avoir un mot tel que null (inspiré par @Serg) en cas d’échec de la recherche, vous pouvez utiliser la commande ci-dessous:

$ 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 # Affiche les adresses IP sur STDOUT. Si vous ne souhaitez pas utiliser cat à partir d'un fichier, vous pouvez directement diriger à partir d'un autre processus tel que command | xargs ...
  • xargs -I % bash -c # Prenez chaque ligne de la gauche du tube, utilisez % comme espace réservé, exécutez la commande bash qui suit entre guillemets simples
  • Dig Adresse IP qui provient de l'espace réservé % by xargs, affectez à la variable query. Si le résultat est null (longueur zéro), affectez la chaîne "null" Word à la variable query, puis imprimez-la sous la forme IP:result

Démo:

$ 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.
3
sdkks

Inspiré par l'exemple de Shell présenté dans une autre réponse, j'ai décidé qu'une version de Perl me convenait mieux. J'ai donc créé ce fichier "batch_dns_by_ip.pl". Vous mettez une liste d'adresses IP dans un fichier texte que vous dirigerez vers le programme.

Le code devrait ressembler à ceci et vous voudrez rendre le fichier exécutable:

#!/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]);
        }
}

Une course pourrait ressembler à ceci:

$ 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

J'espère que ça aide!

1
James Ebersold

nmap

Vous pouvez juste

 nmap -R -sL -Pn 1.2.3.0/24 | grep '('
  • -n/-R Ne jamais résoudre le DNS/Toujours résoudre [par défaut: parfois]
  • -sL List Scan - liste simplement les cibles à analyser
  • -Pn Traitez tous les hôtes comme en ligne - ignorez la découverte d’hôte. Supprimez ceci pour obtenir ce qui répond au ping.

Le grep laisse à peine résolu le DNS inversé et quelques lignes utiles.

Ajoutez --dns-servers x.x.x.x pour utiliser un serveur DNS spécifique.

1
Pablo Bianchi