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


72

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

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

Ответы:


56

копать и хост должен быть то что ты ищешь;)

http://www.unix.com/unix-dummies-questions-answers/9866-nslookup-linux.html

В системе * nix вы можете выполнить эту команду: dig -x [address]

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

В Windows используйтеnslookup

РЕДАКТИРОВАТЬ: nslookup тоже работает на * nix системах. Больше информации о команде nslookup, кажется ли, что она заменена с тех пор: http://linuxreviews.org/man/nslookup/


Тот же синтаксис также работает с drillутилитой из ldns, т.е.drill -x 123.123.123.123
Tullo_x86

53

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

dig -x [address]

16
Это определенно кажется самым простым способом. Добавьте + short в конце, чтобы ничего не возвращать, кроме результата rdns. dig -x [address] +short
ColinM

3
Этот +shortфлаг действительно полезен!
Нил

Работает ли это с адресами IPv6?
Геремия,

@ColinM Хороший вопрос. Я отредактировал свой ответ на основе этого. Спасибо!
Марк-Андре Р.

Да, @Geremia, в соответствии с man dig, адрес находится адрес IPv4 в точечно-числовом формате, или двоеточия адреса IPv6.
Рикардо

8

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

 nslookup <ip-number EX: 127.0.0.1>

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

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


Да, в самом деле. И в предыдущих версиях Windows.
Кубанчик

4

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

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

    # split the IP address into an array of octets
    IFS="." read -r -a octets <<< "$1"

    # add each octet to our $addr string in reverse order
    for octet in "${octets[@]}"; do
         addr=$octet"."$addr
    done

    # run a DNS pointer lookup with dig
    # `+short` makes dig's output very terse (un-verbose)
    # `"${@:2}"` passes any extra params from this command to 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 -x dot-notationэто «ярлык для обратного поиска». Мне было интересно, какой будет длинная версия. Спасибо за объяснение! :)
webwurst

from man dig: Когда используется -x, нет необходимости указывать имя, класс и аргументы типа. dig автоматически выполняет поиск имени, например 94.2.0.192.in-addr.arpa, и устанавливает тип запроса и класс в PTR и IN соответственно.
Рикардо

3

Я хорошо знаю, что 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

4
Вы можете сделать "getent hosts [IP or HOSTNAME]"
hayalci

Хммм ... Я изначально писал инструменты только для того, чтобы поиграть с функциями, так что без потерь, но я бы, конечно, не вставил их в serverfault, если бы знал об инструменте getent. Спасибо за указатель.
jj33

-1: они ограничены IPv4, gethostbyname не получает адреса IPv6, когда они существуют, и gethostbyaddr не принимает адреса IPv6.
Бортцмейер

Эти функции на многие годы устарели. Они были даже устаревшими, когда это было написано. В perl и большинстве других языков вы должны использовать getaddrinfo и getnameinfo.
Майкл Хэмптон

3

В Windows я привык к использованию:

ping -a <ip address>

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


3

Попробуйте "хост"

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

    $ host google-public-dns-b.google.com.
    google-public-dns-b.google.com has address 8.8.4.4
    google-public-dns-b.google.com has IPv6 address 2001:4860:4860::8844
    
  • Обратный поиск с host:

    $ host 8.8.4.4
    4.4.8.8.in-addr.arpa domain name pointer google-public-dns-b.google.com.
    

Похоже на копать

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

    $ dig google-public-dns-b.google.com. +short
    8.8.4.4
    
  • Обратный поиск с dig:

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

1

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

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

РЕДАКТИРОВАТЬ: Помните, что обратный поиск работает только в том случае, если для IP-адреса создана запись PTR, и не гарантируется возвращение искомого имени хоста. Полностью зависит от того, как DNS настроен и поддерживается в вашей ситуации.


5
nsloookup больше не поддерживается, и его авторы рекомендуют копать. Кроме того, dig -x намного проще, чем инвертировать байты самостоятельно.
bortzmeyer

Это приятно знать, большое спасибо за вклад! Старые привычки умирают тяжело;)
squillman


0

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


возможно, нет.
Питер Тернер

Да, хорошо, я постил немного быстро, и после проверки я не был уверен в своем ответе, я просто отложил свой пост и отредактировал его, чтобы добавить больше деталей;)
Марк-Андре Р.

Хорошо, но я не принимаю этот ответ. Жаль, что мы не можем получить Googley AJAX в реальном времени здесь.
Питер Тернер

LOL Да, хорошо, у нас не может быть всего;) Хорошего дня, я надеюсь, что я помогу тебе;)
Марк-Андре Р.

0

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

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

C:\dig>dig -x <IP Address>

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


0

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.