Perl和gethostbyname奇怪的行为

时间:2013-02-20 08:14:07

标签: perl hostname gethostbyname

我正在运行以下内容:

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

同时运行gethostbyname ("1")会返回一个已定义的结果,但这根本不符合here所写的内容。

我想知道我是否应该使用这种方法?我想要做的是找出给定的主机名是否有效。

1 个答案:

答案 0 :(得分: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

(确切的行为可能因系统而异。虽然我在同一台机器上使用FireFox,但我的Windows和我的cygwin版本中的gethostbyname无法识别这些数字。)