Определение вашего имени и адреса

Проблема

Требуется узнать ваше (полное) имя хоста.

Решение

Сначала получите свое (возможно, полное) имя хоста. Воспользуйтесь либо стандартным модулем 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 гарантирует получение полного имени.

См. также




2013-09-10 17:05:19

Proverte kod v komentariyah gde pro list tam oshibki detskie




Оставить комментарий:
Ваше Имя:
Email:
Антибот: *  
Ваш комментарий: