0

嗨,我正在使用 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;

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

4

1 回答 1

1

所有这些local都应该是my[1]2应该是AF_INET(由 Socket 模块导出),并且您可以通过使用 Socket's 来简化事情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;
于 2013-05-27T05:02:04.740 回答