Странное поведение Perl и gethostbyname

Я запускаю следующее:

perl -wl -e 'print gethostbyname ("1234");'
123424Ò

также запуск gethostbyname ("1") возвращает определенный результат, это вообще не соответствует тому, что написано здесь .

Мне интересно, должен ли я вообще использовать этот метод? что я пытаюсь сделать, так это выяснить, действительно ли данное имя хоста.


person snoofkin    schedule 20.02.2013    source источник
comment
Они возвращают ожидаемый результат (неопределенный) для меня. Все, что он делает, это связывается со службой разрешения имен системы, так что, возможно, у вас там происходит что-то смешное? (Проверено Perl 5.16.1 на Win32)   -  person    schedule 20.02.2013


Ответы (1)


Введите 1249767172 в адресную строку браузера, и вы, возможно, попадете в Google. Это потому, что действительный IP-адрес — это просто число от 0 до 4294967295.

Конечно, вы больше знакомы с записью в виде точек (74.125.239.4), но во многих местах также принимается непосредственно десятичная запись (1249767172) или даже шестнадцатеричная запись (0x4A7DEF04).

Поскольку вы предоставляете действительные IP-адреса, ошибки не возвращаются.

$ perl -MSocket=inet_ntoa -E'
    my $addr = gethostbyname($ARGV[0]);
    say inet_ntoa($addr);
' 1249767172
74.125.239.4

$ perl -MSocket=inet_ntoa -E'
    my $addr = gethostbyname($ARGV[0]);
    say inet_ntoa($addr);
' 1
0.0.0.1

$ perl -MSocket=inet_ntoa -E'
    my $addr = gethostbyname($ARGV[0]);
    say inet_ntoa($addr);
' 1234
0.0.4.210

(Точное поведение может различаться в зависимости от системы. gethostbyname из моей Windows и мои сборки cygwin не распознают эти числа, хотя FireFox на той же машине распознает.)

person ikegami    schedule 20.02.2013