Вопрос или проблема
Какая команда позволяет найти имя компьютера по его 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:
- Dig:
dig -x [IP-адрес]
- Nslookup:
nslookup -type=ptr [IP-адрес]
- 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-системах
-
dig: Это мощный инструмент для DNS-запросов, который поддерживает обратные DNS-запросы с использованием специального параметра
-x
.Команда:
dig -x [IP-адрес]
Если вы хотите получить только результат без дополнительных данных, добавьте флаг
+short
:dig -x [IP-адрес] +short
-
host: Это более упрощенная утилита для выполнения DNS-запросов, которая также может использоваться для обратного DNS.
Команда:
host [IP-адрес]
-
nslookup: Еще один универсальный инструмент, доступный как в Unix, так и в Windows. Для выполнения обратного DNS-запроса используйте следующую команду:
Команда:
nslookup [IP-адрес]
Для более точного запроса можно установить тип записи:
nslookup > set type=ptr > [инвертированный IP-адрес].in-addr.arpa
Утилиты для обратного DNS-запроса на Windows
-
nslookup: Этот инструмент также доступен на Windows и выполняет аналогичные функции.
Команда:
nslookup [IP-адрес]
-
ping с параметром -a: Эта команда также может использоваться для определения имени компьютера, соответствующего IP-адресу, однако она может возвращать данные из файла hosts и других источников.
Команда:
ping -a [IP-адрес]
Примечания о PTR-записях
Обратите внимание, что успешность выполнения обратного DNS-запроса зависит от наличия соответствующей PTR-записи в DNS. Если такая запись не создана, вы получите ответ, что имя не найдено, даже если IP-адрес корректный. Настройка DNS может отличаться в зависимости от вашего окружения и провайдера.
Заключение
Используя указанные команды, вы можете легко выполнить обратный DNS-запрос для определения имени, соответствующего IP-адресу. Эти инструменты позволяют IT-специалистам и системным администраторам эффективно выполнять диагностику и администрирование сетей.