Как проверить объем IP для обратного DNS?

Существует ли способ проверить для инвертирования проверки DNS на загрузки дюйм/с, у меня есть список IP, который я хочу проверить?

Я знаю, что Вы, могут сделать их индивидуально:

host <ip-address>

и

dig -x <ip-address>

Кроме того, есть ли способ экспортировать их?

7
задан 17 August 2016 в 03:13

4 ответа

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
9
ответ дан 23 November 2019 в 06:15

Вот является быстрое и грязное одним лайнером: Содержание 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.
3
ответ дан 23 November 2019 в 06:15

Вдохновленный примером оболочки, показанным в другом ответе, я решил, что версия 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

Я надеюсь, что это помогает!

1
ответ дан 23 November 2019 в 06:15

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.

2
ответ дан 23 November 2019 в 06:15

Другие вопросы по тегам:

Похожие вопросы: