Есть несколько утилит командной строки для имен решительности хозяв ( host
, dig
, nslookup
), однако все они используют неймсерверы исключительно, в то время как приложения , в общем взгляде на /etc/hosts
первую ( с помощью gethostbyname я считаю).
Есть ли утилита командной строки для разрешения имен хостов, которая ведет себя как обычное приложение, таким образом, просматривая /etc/hosts
сначала и только потом запрашивая сервер имен?
(Я знаю, что это, вероятно, будет как 3 строки c, но мне нужно это внутри несколько переносимого сценария оболочки.)
awk '/hostname/ { print $1 }' /etc/hosts
?Ответы:
Это легко достигается с помощью
getent
:getent
сделает поиск для любого типа данных, настроенных вnsswitch.conf
.источник
dig
илиnslookup
.Один инструмент, который будет работать, это
getent
. Так что вы можете использоватьgetent hosts www.google.com
, илиgetent hosts localhost
. Он будет извлекать записи из баз данных, как указано в конфигурации переключателя службы имен/etc/nsswitch.conf
.источник
files dns
хосты, что означает обращение к / etc / hosts и затем преобразователь DNS. Ваш конфиг может быть другим.getent
. Спасибо за вступление к этой команде.Вы можете использовать оболочку gethostbyname () (не рекомендуется), например:
Или оболочка getaddrinfo (), например:
Обратите внимание, что getaddrinfo вернет все экземпляры в виде списка. Последняя часть команды выбирает только первый кортеж. Это также может вернуть адреса IPv6.
источник
resolveip
сделаю это.Как ни странно, это часть пакетов mysql-server на RHEL и Ubuntu.
источник
Вы можете использовать [ваш любимый язык здесь], чтобы написать скрипт, который вызывает getnameinfo . Именно так должны поступать двоичные файлы (например, ping), чтобы вы были уверены, что получаете то же лечение.
источник
Используйте
getent ahosts
, например:Вы получите все адреса IPv4 и IPv6 через распознаватель glibc (таким образом,
/etc/hosts
сначала используйте , как обычно настраивается/etc/nsswitch.conf
).Не используйте
getent hosts
, так как он даст вам адреса IPv6 или IPv4 (не оба), и выбранный протокол может быть не тем, который не работает. Действительно, IPv6-адреса обычно предпочтительнее, но в некоторых местах данные IPv6 фильтруются (не поддерживаются) маршрутизаторами.источник
версия командной строки "gethostbyname" :
источник
Вы могли бы быть действительно взломаны и использовать
arp
:но это было бы действительно ужасно, так что не стоит этого делать.
источник
getent hosts
сломан. Предпочитает IPv6-адреса,gai.conf
должен быть настроен на ipv4, но ....Perl
gethostbyname
использует приоритет в/etc/nsswitch.conf
Так что это работает, как
getent hosts
должно работать для меня.Также:
должно сработать.
источник
getent ahosts
.Попробуй это:
источник
Следующая команда выполнит поиск через DNS / etc / hosts через прямой поиск DNS-сервера.
Эта команда попытается пропинговать домен (в данном случае google.com) один раз с тайм-аутом ожидания 2 секунды, получить первую строку команды PING, в которой будет указано «PING google.com (216.58.199.36) 56 (84). ) байтов данных ", затем с помощью Stream Editor (sed) определите первый набор скобок и извлеките в него данные, являющиеся искомым IP-адресом.
ПРИМЕЧАНИЕ: выражение regex не будет работать, если в URL есть круглые скобки (или круглые скобки), но это будет редкий случай.
источник