我正在尝试记录脚本请求,并且我想将客户端的IP地址存储在int(4)
列中,使用INET_NTOA()
以可读函数返回它。将CGI REMOTE_ADDR转换为网络字节顺序以用于MySql INET_NTOA
然而,在我的Perl CGI脚本,$ENV{REMOTE_ADDR}
包含在其中,当与INET_ATON()
功能输入到数据库中,被错误地转换,所以当我拉回来了主机字节序的IP,我有一个完全不同的地址。
#!usr/bin/perl -wT
use strict;
use CGI;
use DBI;
my $dbh = DBI->connect("DBI:mysql:$db:$server", "$user", "$password");
my $addr = $ENV{REMOTE_ADDR};
my $insert = $dbh->prepare(qq[insert into access_log (ipaddress)
values (INET_ATON('$addr'))]);
$insert->execute or die "sql insert error";
my $retrieve = $dbh->prepare(qq[select INET_NTOA(ipaddress) as IP_Address
from access_log]);
$retrieve->execute or die "sql select error";
my $newIP = $retrieve->fetchrow_array;
理想的情况下,这个脚本应该返回的$addr
价值,而是我得到的东西完全不同。在将数据放入数据库之前,如何格式化$addr
?
感谢您的帮助。
TRWTF的是,在2011年写仅支持IPv4的代码重新考虑你的数据存储的首选IP地址。 – daxim