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?
xargs
fournit 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, xargs
est un processus supplémentaire. Et si nous voulions utiliser uniquement Shell et Dig
name__? À partir de la version 4 de bash, nous pouvons utiliser mapfile
ou readarray
pour 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 set
pour 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
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 simplesDig
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.
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!
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.