Утилиты любят host
и dig
позволяют увидеть IP-адрес, соответствующий имени хоста.
Существует также getent
утилита, которая может использоваться для запроса /etc/hosts
или других баз данных NSS.
Я ищу удобную стандартную утилиту (которая доступна, скажем, в Debian), которая разрешает имя хоста независимо от того, где оно определено.
Это должно быть более или менее эквивалентно
ping "$HOST" | head -1 | perl -lne '/\((.*?)\)/ && print $1'
getent
?getent
также смотрит в DNS (я думал, что он только смотрит/etc/hosts
). Теперь, когда я попробовал это, вот что не такgetent
:google.com
он возвращает один адрес, и этот адрес - IPv6. Что не помогает, так как я нахожусь в сети IPv4, и моя команда фактически напечатает адрес IPv4.Ответы:
Единственная известная мне команда, которая делает то, что вам нужно, - resolip:
http://linux.die.net/man/1/resolveip
Однако он поставляется только с mysql-сервером, который может быть не идеальным для установки везде.
источник
Если проблема в том, что вы не хотите разрешать эти имена с помощью ipv6, просто попросите getent использовать только ipv4. Это будет перечислять все адреса ipv4:
источник
ahostsv6
.getent ahosts google.com
.Дело в том, что есть несколько API для разрешения имен хостов, например
gethostbyname
,getaddrinfo
иinet_pton
некоторые из них могут возвращать более одного адреса, и / или вы можете запросить тип адреса, который вы хотите.Если вам нужен портативный способ получить один IPv4-адрес, то, возможно:
источник
(Этот ответ применим, только если вы являетесь пользователем root на компьютере.)
Меня это тоже раздражало, а потом я стандартизировал запуск dnsmasq на всех моих машинах. Dnsmasq - это легкий DNS-кеш. Дополнительным преимуществом является содержание
/etc/hosts
более DNS.источник
gethostip -d name.domain
изsyslinux
пакета на Ubuntu (и, вероятно, Debian).-d
выводит десятичный формат.источник
Я использовал свои знания Perl и сделал небольшой скрипт с обработкой ошибок:
/ USR / местные / бен / gethostip:
Спасибо Стефану Шазеласу за первоначальную идею
источник