Какой самый простой способ получить IP-адрес от имени хоста?
Я думал о том, чтобы попробовать ping
и разобрать его на выходе. Тем не менее, это не очень приятно и, вероятно, не будет работать одинаково на всех системах.
Я немного искал и нашел решения nslookup
, но это не работает для имен хостов в /etc/hosts
.
Ответы:
Вы можете сделать это с помощью стандартных системных вызовов. Вот пример в Perl:
производит вывод:
(В командной строке, тот же сценарий можно записать в виде:
perl -MSocket -MData::Dumper -wle'my @addresses = gethostbyname("google.com"); my @ips = map { inet_ntoa($_) } @addresses[4 .. $#addresses]; print Dumper(\@ips)'
)Вы можете сделать это аналогично на других языках - см. Справочную страницу для системных вызовов
man -s3 gethostbyname
и т. Д.источник
perl -MSocket -MData::Dumper -wle'my @addresses = gethostbyname("www.google.com"); my @ips = map { inet_ntoa($_) } @addresses[4 .. $#addresses]; print $ips[0]'
.sed -e '/some people consider Perl a better form/s/better/worse/'
SCNRhost <hostname>
Пример:
редактировать
В Linux (и, по крайней мере, в некоторых вариантах OS X) вы можете использовать его
resolveip
, который является частью серверного пакета MySQL:источник
/etc/hosts
.) Попробуйтеhost localhost
.serv ~ $ host localhost \n localhost has address 127.0.0.1
resolveip
.resolveip
не установлен по умолчанию на моем Debian.Этот древний пост, кажется, имеет много творческих решений.
Если мне нужно убедиться, что к ним также
/etc/hosts
обращаются, я склонен использоватьgetent hosts somehost.com
Это работает, по крайней мере, если `/etc/nsswitch.conf 'был настроен для использования файлов (как обычно).
источник
ahosts
не возвращает, а возвращает многострочную информацию.Для IPv4 есть стандартная программа, которая работает из коробки, используя преобразователь, включая / etc / hosts:
Это часть Debian, установите его с:
Для других протоколов, кроме IPv4 (например, IPv6), в настоящее время я не знаю аналогичного инструмента. Обновление: из-за этого я только что написал небольшой инструмент, который также способен разрешать IPv6:
https://github.com/hilbix/misc/blob/master/src/ipof.c
Он предназначен для быстрого и грязного использования оболочки, например,
gethostip
но допускает и IPv6:Он также может быть использован в интерактивном режиме, например:
НТН
источник
Почему нет
dig +short hostname
?(запрос DNS)
источник
/etc/hosts
учитывает.Ну, мое текущее решение:
источник
sed
ведет себя немного по-разному в каждой системе. :) Как раздражает. Я немного изменил это, я думаю, что теперь оно должно работать везде.На некоторых Unix будет работать следующее:
Например, в Mac OS X я получаю это:
источник
arp -n hostname
показывает IP.Использование
ping
не так уж и плохо, так как у вас, как правило, нет сильных зависимостей.Вот функция, которую я использовал в системах Linux:
источник
источник