我正在运行以下内容:
perl -wl -e 'print gethostbyname ("1234");'
123424Ò
同时运行gethostbyname ("1")
会返回一个已定义的结果,但这根本不符合here所写的内容。
我想知道我是否应该使用这种方法?我想要做的是找出给定的主机名是否有效。
答案 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
无法识别这些数字。)