Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl中的gethostbyaddr返回空?_Perl - Fatal编程技术网

perl中的gethostbyaddr返回空?

perl中的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

您好,我正在使用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($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正在工作?如果这不是什么大秘密,也许你可以告诉我们地址是什么。