0

こんにちは、perl$ENV{'REMOTE_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;

ホスト名は与えられず、代わりに何も返されません。何か助けて??

4

1 に答える 1

1

これらlocalはすべてmy[1]2ある必要がありAF_INET(Socket モジュールによってエクスポートされる)、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;ください!
于 2013-05-27T05:02:04.740 に答える