perl中的gethostbyaddr返回空?
您好,我正在使用perlperl中的gethostbyaddr返回空?,perl,Perl,您好,我正在使用perl$ENV{'REMOTE\u ADDR'}获取ip地址。它将返回IP地址 但是当我使用 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($packad
$ENV{'REMOTE\u ADDR'}
获取ip地址。它将返回IP地址
但是当我使用
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;
它没有给出任何主机名,而是不返回任何内容。
任何帮助???所有那些
本地的应该是my
[1],2
应该是AF\u INET
(由Socket模块导出),您可以通过使用Socket的INET\u 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";
始终使用严格使用;使用警告代码>李>
我认为,$packaddr
可能需要事先使用将其转换为正确的字节顺序。inet\u aton($packaddr)??$packaddr=inet\u aton“虚线形式的ip”
。没有,我也使用了use Socket尝试过。。如果你是那种Modern::Perl
的人,那也没什么用。没有一个可以返回??我想知道计算机的主机名计算机的主机名叫什么?这很难看。让我们跳到最后。gethostbyaddr
知道的主机名是DNS中的主机名。可能还有本地的/etc/hosts
。远程计算机自己调用的名称是您无法查找的,除非它已在DNS中发布了该名称。您是否有任何独立的确认,证明所述IP地址的反向DNS正在工作?如果这不是什么大秘密,也许你可以告诉我们地址是什么。