【问题标题】:Perl and gethostbyname weird behaviorPerl 和 gethostbyname 奇怪的行为
【发布时间】:2013-02-20 08:14:07
【问题描述】:

我正在运行以下命令:

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

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

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

【问题讨论】:

  • 这些为我返回了预期的结果(未定义)。所有这一切都是联系系统的名称解析服务,所以也许你在那里发生了一些有趣的事情? (在 Win32 上测试 Perl 5.16.1)

标签: perl hostname gethostbyname


【解决方案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

(具体行为可能因系统而异。我的 Windows 和我的 cygwin 版本中的 gethostbyname 无法识别这些数字,尽管同一台机器上的 FireFox 可以。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    • 2014-11-14
    • 2012-10-22
    • 1970-01-01
    • 2016-02-05
    相关资源
    最近更新 更多