Существует ли способ проверить для инвертирования проверки DNS на загрузки дюйм/с, у меня есть список IP, который я хочу проверить?
Я знаю, что Вы, могут сделать их индивидуально:
host <ip-address>
и
dig -x <ip-address>
Кроме того, есть ли способ экспортировать их?
xargs
обеспечивает выбор --arg-file
. С -L1
опция рассматривать каждую строку как аргумент, самая простая команда, которую мы можем сделать, следующие
$ xargs -L1 --arg-file=ip-addr.txt dig +short -x
google-public-dns-a.google.com.
resolver2.opendns.com.
Если необходимо отобразить IP-адрес рядом с разрешенным доменом, мы можем также сделать:
$ 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.
Конечно, xargs
дополнительный процесс. Что, если мы хотели только использовать оболочку и dig
? С версией 4 удара и, мы можем использовать mapfile
или readarray
получить строки текстового файла в массив и затем обработать объекты в цикле:
$ 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.
Если IP-адреса - немногие и не требуют файла длинного текста, POSIXly, мы могли использовать set
определить значения как позиционные параметры:
$ 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.
Мы можем также использовать dig -x $IP_ADDRESS +short
в сценарии как так:
#!/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
Демонстрация демонстрационного использования (все IP-адреса, данные как разделенное пространство):
$ ./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
Как Вы видите в последнем примере, наш сервер DNS не нашел домен для IP-адреса, который мы дали ему. В таком случае мы можем использовать другой сервер DNS, например, open_dns с dig @208.67.220.220 $IP_ADDRESS +short
В демонстрации выше, IP-адреса обеспечиваются на командной строке, как ./reverse_dns_lookup.sh ADDRESS1 ADDRESS2 ADDRESS2
но также можно использовать файл для этого, как так:
$ 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
Альтернативная версия сценария:
Вот альтернативная версия сценария, который печатает раздел AUTHORITY от dig's
вывод. Это может быть намного лучше и более надежным, чем просто +short
версия.Примечание: это использует 8.8.8.8
, который является общедоступным DNS Google. Используйте другой сервер, если Вы чувствуете себя необходимыми.
#!/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
Демонстрация:
$ 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
Вот является быстрое и грязное одним лайнером: Содержание ip-addresses.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
Замените txt своим файлом, который содержит адреса, разделенные новыми строками:
$ cat ip-addresses.txt | xargs -I % bash -c 'echo "%:$(dig -x % +short)"' >> dig-output.txt
Если Вы добавите к dig-output.txt как вышеупомянутый, то содержание того файла будет похоже ниже, если обратный поиск DNS будет успешен, IP:NAME
, в противном случае 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.
Если IP-адреса прибывают из другого процесса, можно непосредственно передать по каналу к xargs.
Править: Если необходимо переброситься парой слов, такие как пустой указатель (вдохновленный @Serg) в случае отказа поиска, можно использовать команду ниже:
$ 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
# Распечатайте IP-адреса к STDOUT
. Если Вы не хотите cat
из файла можно непосредственно передать по каналу от другого процесса как command | xargs ...
xargs -I % bash -c
# Проводите каждую строку от левого из канала, используйте %
как заполнитель, выполненный bash
команда, которая следует в одинарных кавычкахdig
IP-адрес, который прибывает из заполнителя %
xargs
, присвойте переменной query
. Если результат, оказывается, null
(нулевая длина), присвойте строковое слово 'пустого указателя' query
переменная, затем распечатайте как IP:result
Демонстрация:
$ 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.
Вдохновленный примером оболочки, показанным в другом ответе, я решил, что версия Perl подошла мне лучше, таким образом, я создал этот файл "batch_dns_by_ip.pl". Вы помещаете список IP-адреса в текстовом файле, который Вы передадите по каналу в программу.
Код должен быть похожим на это, и Вы захотите сделать исполняемый файл файла:
#!/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]);
}
}
Выполнение могло бы быть похожим на это:
$ 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
Я надеюсь, что это помогает!
nmap
Вы можете просто
nmap -R -sL -Pn 1.2.3.0/24 | grep '('
-n/-R
Никогда не делайте разрешение DNS / Всегда разрешает [значение по умолчанию: иногда]-sL
Сканирование списка - просто перечисляет цели для сканирования-Pn
Рассматривайте все хосты как онлайн - исследование хоста пропуска. Удалите это для получения, что отвечает на ping. grep
оставьте просто разрешенный обратный DNS и некоторые полезные строки.
Добавить --dns-servers x.x.x.x
использовать определенный сервер DNS.