perl中的gethostbyaddr返回空?

时间:2013-05-27 04:57:26

标签: perl

您好我使用perl $ENV{'REMOTE_ADDR'}来获取IP地址。它将返回ipaddress 但是当我使用时

local($ip_address) = $ENV{'REMOTE_ADDR'};
$ip_address =~ s/^\s+|\s+$//g;
local(@bytes) = split(/\./,$ip_address);
local($packaddr) = pack("C4",@bytes);
local($host_name) = (gethostbyaddr($packaddr,2))[0];
print $host_name;

它没有给出任何主机名,而是什么也没有返回。 任何帮助?

1 个答案:

答案 0 :(得分:1)

所有local应该是my [1] 2应该是AF_INET(由套接字模块导出),然后你可以通过使用Socket的inet_aton简化事情,但你的代码工作正常。例如,传递173.194.43.88输出yyz08s09-in-f24.1e100.net。如果它没有返回答案,那是因为没有人回复。

以下是更好的代码。如果Web服务器已经为您完成了它,它还可以避免进行反向查找。

use Socket qw( AF_INET inet_aton );
my $remote_addr = $ENV{REMOTE_ADDR};
my $remote_host = $ENV{REMOTE_HOST}
   // gethostbyaddr(inet_aton($remote_addr), AF_INET)
   // $remote_addr;
print "$remote_host\n";

  1. 始终使用use strict; use warnings;