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


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

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


60
2018-05-11 15:52


Источник




Ответы:


копать а также хозяин должно быть то, что вы ищете;)

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

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

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

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

EDIT: nslookup работает также на * nix-системах. Дополнительная информация о команде nslookup, похоже, что она заменилась с течением времени: http://linuxreviews.org/man/nslookup/


47
2018-05-11 15:54





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

dig -x [address]

47
2018-05-11 15:56



Это определенно кажется самым простым способом. Добавьте + short в конец, чтобы вернуть ничего, кроме результата rdns. dig -x [address] +short - ColinM
Что +short флаг действительно полезен! - Neil
Это работает с адресами IPv6? - Geremia
@ColinM Хорошая точка. На этом я отредактировал свой ответ. Благодаря! - Marc-Andre R.


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

 nslookup <ip-number EX: 127.0.0.1>

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

Подумайте об этом, не является ли nslookup доступным в Windows XP?


5
2018-05-13 05:42



Да, в самом деле. И в предыдущих версиях Windows. - kubanczyk


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

2
2018-05-11 16:41



вы можете сделать «getent hosts [IP или HOSTNAME]» - hayalci
Хммм ... Я сначала написал инструменты, чтобы играть с функциями, поэтому никаких потерь нет, но я, конечно, не вставил бы их в serverfault, если бы знал об инструменте getent. Спасибо за указатель. - jj33
-1: они ограничены IPv4, gethostbyname не извлекает адреса IPv6, когда они существуют, а gethostbyaddr не принимает адреса IPv6. - bortzmeyer
Эти функции много лет устарели. Они были даже устаревшими, когда это было написано. В perl и большинстве других языков вы должны использовать getaddrinfo и getnameinfo. - Michael Hampton♦


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

ping -a <ip address>

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


2
2018-05-11 16:53





У этого вопроса уже есть миллион ответов, но я собираюсь добавить еще один. Вот небольшая функция, которую я написал для простого обратного 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-based, потому что он использует DNS-серверы ОС вместо nslookup-предоставленных (если вы хотите, кстати, вы можете добавить дополнительные флаги выкапывания при вызове revdns, и они будут переданы, чтобы копать)


2
2018-02-03 19:22



Согласно его помощи dig -x dot-notation является «ярлыком для обратного поиска». Мне было интересно, какой будет длинная версия. Спасибо, что объяснили! :) - webwurst


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

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

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


1
2018-05-11 15:57



nsloookup больше не поддерживается, и его авторы рекомендуют копать. Кроме того, dig -x намного проще, чем сами байты. - bortzmeyer
Это хорошо знать, спасибо за вклад! Старые привычки умирают с трудом ;) - squillman


Powershell:

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

1
2018-05-12 10:36