Определение вашего имени и адреса
Проблема
Требуется узнать ваше (полное) имя хоста.
Решение
Сначала получите свое (возможно, полное) имя хоста. Воспользуйтесь либо стандартным
модулем Sys::Hostname:
use Sys::Hostname;
$hostname = hostname();
либо функцией uname модуля POSIX:
use POSIX qw(uname);
($kernel, $hostname, $release, $version, $hardware) = uname();
# или $hostname = (uname)[1];
Затем превратите его в IP-адрес и преобразуйте в каноническую форму:
use Socket; # Для AF_INET
$address = gethostbyname($hostname)
or die "Couldn't resolve $hostname : $!";
$hostname = gethostbyaddr($address, AF_INET)
or die "Couldn't re-resolve Shostname : $!";
Комментарий
Для улучшения переносимости модуль Sys::Hostname выбирает оптимальный способ определения
имени хоста, руководствуясь сведениями о вашей системе Он пытается получить имя хоста
несколькими различными способами, но часть из них связана с запуском других программ. Это
может привести к появлений меченых данных.
С другой стороны, POSIX:: uname работает только в POSIX-системах и не гарантирует
получения полезных данных в интересующем нас поле nodename. Впрочем, на многих компьютерах
это значение все же приносит пользу и не страдает от проблем меченых данных в отличие от Sys::Hostname.
Однако после получения имени хоста следует учесть возможность того, что в нем отсутствует
имя домена. Например, Sys::Hostname вместо guanaco.camelidsorg.org может вернуть просто guanaco.
Чтобы исправить ситуацию, преобразуйте имя в IP-адрес функцией gethostbyname, а затем —
снова в имя функцией gethostbyaddr Привлечение DNS гарантирует получение полного имени.
См. также
Proverte kod v komentariyah gde pro list tam oshibki detskie
Оставить комментарий:
|
|