Представленные решения в основном работают в более простом случае: имя хоста напрямую разрешается в один адрес IPv4. Это может быть единственный случай, когда вам нужно разрешить имена хостов, но если нет, то ниже приводится обсуждение некоторых случаев, которые вам, возможно, придется обработать.
Крис Даун и Хайнци кратко обсудили случай, когда имя хоста разрешается для более чем одного IP-адреса. В этом случае (и других ниже) базовые сценарии в предположении, что имя хоста напрямую разрешает один IP-адрес, могут сломаться. Ниже приведен пример разрешения имени хоста более чем на один IP-адрес:
$ host www.l.google.com
www.l.google.com has address 209.85.148.147
www.l.google.com has address 209.85.148.103
www.l.google.com has address 209.85.148.99
www.l.google.com has address 209.85.148.106
www.l.google.com has address 209.85.148.105
www.l.google.com has address 209.85.148.104
А что есть www.l.google.com
? Это где случай псевдоним должен быть введен. Давайте проверим пример ниже:
$ host www.google.com
www.google.com is an alias for www.l.google.com.
www.l.google.com has address 74.125.39.103
www.l.google.com has address 74.125.39.147
www.l.google.com has address 74.125.39.105
www.l.google.com has address 74.125.39.99
www.l.google.com has address 74.125.39.106
www.l.google.com has address 74.125.39.104
Таким образом, www.google.com
он не разрешается напрямую по IP-адресам, а по псевдониму, который сам по себе разрешает несколько IP-адресов. Для получения дополнительной информации об псевдонимах, проверьте здесь . Конечно, возможен случай, когда псевдоним имеет один IP-адрес, как показано ниже:
$ host g.www.ms.akadns.net
g.www.ms.akadns.net is an alias for lb1.www.ms.akadns.net.
lb1.www.ms.akadns.net has address 207.46.19.190
Но можно ли связывать псевдонимы? Ответ да:
$ host www.microsoft.com
www.microsoft.com is an alias for toggle.www.ms.akadns.net.
toggle.www.ms.akadns.net is an alias for g.www.ms.akadns.net.
g.www.ms.akadns.net is an alias for lb1.www.ms.akadns.net.
lb1.www.ms.akadns.net has address 207.46.19.254
$ host www.google.fr
www.google.fr is an alias for www.google.com.
www.google.com is an alias for www.l.google.com.
www.l.google.com has address 74.125.39.147
www.l.google.com has address 74.125.39.103
www.l.google.com has address 74.125.39.99
www.l.google.com has address 74.125.39.106
www.l.google.com has address 74.125.39.104
www.l.google.com has address 74.125.39.105
Я не нашел ни одного примера, где имя хоста преобразуется в псевдоним, который не преобразуется в IP-адрес, но я думаю, что это может произойти.
Более чем несколько IP-адресов и псевдонимов, есть ли другие особые случаи ... как насчет IPv6? Вы можете попробовать:
$ host ipv6.google.com
ipv6.google.com is an alias for ipv6.l.google.com.
ipv6.l.google.com has IPv6 address 2a00:1450:8007::68
Где имя хоста ipv6.google.com
является именем хоста только для IPv6. А как насчет имен хостов с двумя стеками:
$ host www.facebook.com
www.facebook.com has address 66.220.153.15
www.facebook.com has IPv6 address 2620:0:1c08:4000:face:b00c::
Опять же, что касается IPv6, если ваш хост - только IPv4, вы все равно можете разрешать адреса IPv6 (протестировано на WinXP только для IPv4, а с ipv6.google.com вы можете попробовать его в Linux). В этом случае разрешение завершается успешно, но проверка связи не выполняется с неизвестным сообщением об ошибке хоста . Это может быть случай, когда ваш сценарий не работает.
Я надеюсь, что эти замечания были полезны.
getent <ahosts|ahostsv4|ahostsv6|hosts> <hostname>
ответ где-то там, внизу. Он самый простой, не требует дополнительных пакетов и его легче анализировать из скрипта Bash.