Что такое утилита командной строки для обратного DNS?

Вопрос или проблема

Какая команда позволяет найти имя компьютера по его IP-адресу?

Я всегда забываю, что это за команда, но я знаю, что она существует в Windows, и предполагаю, что она также существует в командной строке *nix.

Команды dig и host – то, что вам нужно 😉

На системах *nix вы можете использовать эту команду:

dig -x [адрес]

Кроме того, вы можете добавить +short в конце команды dig, чтобы вывести только результат DNS.

Также есть nslookup как на системах *nix, так и в Windows для обратных DNS-запросов.

На *nix вы можете использовать:

dig -x [адрес]

Попробуйте “host”

  • Прямой поиск с помощью host:

    $ host google-public-dns-b.google.com.
    google-public-dns-b.google.com имеет адрес 8.8.4.4
    google-public-dns-b.google.com имеет адрес IPv6 2001:4860:4860::8844
    
  • Обратный поиск с помощью host:

    $ host 8.8.4.4
    4.4.8.8.in-addr.arpa указывает на имя домена google-public-dns-b.google.com.
    

Похоже на dig

  • Прямой поиск с помощью dig:

    $ dig google-public-dns-b.google.com. +short
    8.8.4.4
    
  • Обратный поиск с помощью dig (вам нужен дополнительный параметр -x):

    $ dig -x 8.8.4.4 +short
    google-public-dns-b.google.com.
    

Кстати: dig капризен в отношении порядка опций командной строки:

  • dig -x 8.8.4.4 +short работает.
  • dig +short -x 8.8.4.4 работает.
  • dig -x +short 8.8.4.4 не работает.

Попробуйте “rdt”

Это требует немного больше настроек. Но если вы сделаете это, вы сможете запустить этот PHP-скрипт “rdt” из командной строки, и это очень замечательно. Он делает несколько итераций между прямыми и обратными запросами. (rdt ранее был известен как rdns-trace.php. “RDNS” означает “обратный DNS”.)

Скачайте отсюда: https://github.com/grawity/code/blob/main/rdt

Пример. Вот как это выглядит, когда работает:

$ rdt google-public-dns-b.google.com.
google-public-dns-b.google.com. = 2001:4860:4860::8844, 8.8.4.4
   2001:4860:4860::8844 = dns.google
      dns.google = 2001:4860:4860::8844, 2001:4860:4860::8888, 8.8.4.4, 8.8.8.8
         2001:4860:4860::8888 = dns.google
         8.8.8.8 = dns.google
   8.8.4.4 = dns.google

На большинстве систем Linux, которые мне известны, вы можете использовать:

 nslookup <номер-ip, напр. 127.0.0.1>

это будет работать в командной строке.

Если подумать, разве nslookup не доступен в Windows XP?

Я хорошо осведомлён, что dig/host/nslookup являются стандартными инструментами для этих задач, но я держу их для тестирования разрешения ОС (по сути, чтобы протестировать правильность работы nsswitch.conf):

gethostbyname:

#!/usr/bin/perl

use Socket;

my @t = gethostbyname($ARGV[0]);
print "\$name     = $t[0]\n"; shift(@t);
print "\$aliases  = $t[0]\n"; shift(@t);
print "\$addrtype = $t[0]\n"; shift(@t);
print "\$length   = $t[0]\n"; shift(@t);

foreach (@t) {
  print "          = ", inet_ntoa($_), "\n";
}

gethostbyaddr:

#!/usr/bin/perl

use Socket;

my @t = gethostbyaddr(inet_aton($ARGV[0]), AF_INET);
print "\$name     = $t[0]\n"; shift(@t);
print "\$aliases  = $t[0]\n"; shift(@t);
print "\$addrtype = $t[0]\n"; shift(@t);
print "\$length   = $t[0]\n"; shift(@t);

foreach (@t) {
  print "          = ", inet_ntoa($_), "\n";
}

пример:

g3 0 /home/jj33/swap > gethostbyname www.google.com
$name     = www.l.google.com
$aliases  = www.google.com
$addrtype = 2
$length   = 4
          = 72.14.205.147
          = 72.14.205.103
          = 72.14.205.104
          = 72.14.205.99
g3 0 /home/jj33/swap > gethostbyaddr 72.14.205.147 
$name     = qb-in-f147.google.com
$aliases  = 
$addrtype = 2
$length   = 4
          = 72.14.205.147

На Windows я привык использовать:

ping -a <ip-адрес>

так как это также отразит данные из вашего файла hosts и WINS и так далее.

У этого вопроса уже есть миллион ответов, но я собираюсь добавить еще один. Вот маленькая функция, которую я написал для простого выполнения обратного DNS с помощью dig. Добавьте это в ваш ~/.bashrc файл, перезагрузите оболочку, и затем вы сможете выполнять запросы обратного DNS с revdns 1.2.3.4:

function revdns() {
    octets=""
    addr="in-addr.arpa"

    # разбить IP-адрес на массив октетов
    IFS="." read -r -a octets <<< "$1"

    # добавить каждый октет в нашу строку $addr в обратном порядке
    for octet in "${octets[@]}"; do
         addr=$octet"."$addr
    done

    # выполнить поиск указателя DNS с помощью dig
    # `+short` делает вывод dig очень сжатым (незначительным)
    # `"${@:2}"` передает любые дополнительные параметры из этой команды в dig
    dig ptr +short $addr "${@:2}"
}

Обратные DNS-запросы выполняются с помощью проверки записей указателя (PTR). Если вы хотите сделать обратный DNS для “1.2.3.4”, вам нужно будет искать записи указателя для “4.3.2.1.in-addr.arpa”. Моя функция принимает IP-адрес, переворачивает порядок октетов (т.е. меняет его с 1.2.3.4 на 4.3.2.1) и затем использует dig для выполнения поиска PTR, который я только что описал.

Вы, конечно, можете просто использовать nslookup 1.2.3.4, если у вас есть эта команда, но я предпочитаю это решение на основе dig, потому что оно использует DNS-серверы ОС вместо предоставляемых nslookup (если хотите, кстати, вы можете добавить дополнительные флаги dig, когда вызываете revdns, и они будут переданы в dig)

Если вы используете nslookup, то это так (предполагая, что 192.168.0.1 – это вопросный IP):

> set type=ptr
> 1.0.168.192.in-addr.arpa

ИЗМЕНЕНИЕ:
Помните, что обратный поиск работает только если для IP создана запись PTR, и не гарантируется, что она вернет искомое имя хоста. Это совершенно зависит от того, как DNS настроен и поддерживается в вашей ситуации.

Powershell:

[net.dns]::gethostentry("69.59.196.212").HostName

Я предпочитаю командную строку dig для Windows (доступна здесь: http://members.shaw.ca/nicholas.fong/dig/) вместо nslookup в любой день.

Если вам нужно тестировать/админировать DNS с рабочего места под управлением Windows, возьмите этот инструмент. Затем:

C:\dig>dig -x <IP-адрес>

…также не забудьте добавить c:\dig в ваш путь!

Ну, какой-то дружелюбный человек только что написал, что nslookup – это команда, и он прав. Она работает как в Unix, так и в Windows. Не понимаю, почему вы удалили свой ответ, но вы правы, сэр.

Вот несколько инструментов командной строки для обратного DNS:

  1. Dig:

dig -x [IP-адрес]

  1. Nslookup:

nslookup -type=ptr [IP-адрес]

  1. Host:

host [IP-адрес]

Способ разрешения имени хоста с помощью systemd:

resolvectl query [имя_хоста]

а для обратного поиска по адресу:

resolvectl query [адрес]

Это полезно для минимизированных систем, в которых не установлены host, nslookup и dig.

nbtstat -a < ip-адрес >

Вот как я вижу более полный обратный поиск DNS. Надеюсь, это пригодится будущим зрителям этой страницы.

for ip in {1..254..1}; do dig -x 1.1.1.$ip | grep $ip >> dns.txt; done;

Ответ или решение

Обратный DNS: Как найти имя компьютера по IP-адресу через командную строку

Обратный DNS (Reverse DNS) — это процесс, который позволяет определить доменное имя, соответствующее заданному IP-адресу. Существует несколько утилит командной строки, позволяющих выполнить обратный DNS-запрос как в операционных системах на базе Windows, так и на системах Unix (Linux, macOS и других).

Утилиты для обратного DNS-запроса на Unix-системах

  1. dig: Это мощный инструмент для DNS-запросов, который поддерживает обратные DNS-запросы с использованием специального параметра -x.

    Команда:

    dig -x [IP-адрес]

    Если вы хотите получить только результат без дополнительных данных, добавьте флаг +short:

    dig -x [IP-адрес] +short
  2. host: Это более упрощенная утилита для выполнения DNS-запросов, которая также может использоваться для обратного DNS.

    Команда:

    host [IP-адрес]
  3. nslookup: Еще один универсальный инструмент, доступный как в Unix, так и в Windows. Для выполнения обратного DNS-запроса используйте следующую команду:

    Команда:

    nslookup [IP-адрес]

    Для более точного запроса можно установить тип записи:

    nslookup
    > set type=ptr
    > [инвертированный IP-адрес].in-addr.arpa

Утилиты для обратного DNS-запроса на Windows

  1. nslookup: Этот инструмент также доступен на Windows и выполняет аналогичные функции.

    Команда:

    nslookup [IP-адрес]
  2. ping с параметром -a: Эта команда также может использоваться для определения имени компьютера, соответствующего IP-адресу, однако она может возвращать данные из файла hosts и других источников.

    Команда:

    ping -a [IP-адрес]

Примечания о PTR-записях

Обратите внимание, что успешность выполнения обратного DNS-запроса зависит от наличия соответствующей PTR-записи в DNS. Если такая запись не создана, вы получите ответ, что имя не найдено, даже если IP-адрес корректный. Настройка DNS может отличаться в зависимости от вашего окружения и провайдера.

Заключение

Используя указанные команды, вы можете легко выполнить обратный DNS-запрос для определения имени, соответствующего IP-адресу. Эти инструменты позволяют IT-специалистам и системным администраторам эффективно выполнять диагностику и администрирование сетей.

Оцените материал
Добавить комментарий

Капча загружается...