1

我正在运行以下内容:

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

同样运行gethostbyname ("1")返回一个定义的结果,这根本不符合这里写的内容。

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

4

1 回答 1

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 可以。)

于 2013-02-20T08:35:01.657 回答