您好我使用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;
它没有给出任何主机名,而是什么也没有返回。 任何帮助?
答案 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";
use strict; use warnings;
!