在使用Perl编写CGI应用程序时,请使用以下代码记录访问者。
(my $digits = #ENV{'REMOTE_ADDR'}) =~ s/\.//g;
my $address = pack("C4", $digits);
在perldoc,
打包模板,列表
“C4”应该是模板。这是什么意思?
答案 0 :(得分:7)
您的代码看起来像代码中的一个错误提取,用于将点分四格式的IP地址转换为可传递给socket
调用的四个字节的字符串。
假设#ENV
是$ENV
的错误,您的代码会从虚线四边形中删除点,为您提供一个4到12位的字符串。然后(隐式地)将这些数字解释为单个整数,将其最低8位放在结果的第一个字节中,并用零填充其余数字(因为pack
为三个缺少的列表元素提供空值,然后被解释为零。
为什么要将二进制IP地址打印到日志文件中,我不会尝试猜测。但是给出的代码几乎是胡说八道。如果您确实需要二进制IP地址,我建议
use Socket 'inet_aton';
my $address = inet_aton($ENV{REMOTE_ADDR});
答案 1 :(得分:2)