【发布时间】:2011-09-29 17:47:04
【问题描述】:
我正在尝试记录对脚本的请求,并且我想将客户端的 IP 地址存储在 int(4) 列中,并使用 INET_NTOA() 在可读函数中返回它。
然而,在我的 Perl CGI 脚本中,$ENV{REMOTE_ADDR} 包含一个主机字节顺序的 IP,当使用 INET_ATON() 函数输入数据库时,它被错误地转换,所以当我把它拉回来时,我有一个完全不同的地址。
#!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 地址数据存储的选择。
标签: mysql perl cgi environment-variables ip-address