发现一个ip编码的问题
发现很多论坛,文章系统,留言版等都有记录ip的功能.
或者把ip以字符串方式存入数据库,或者经过编码后存入数据库,但这里面都忽略了一个问题
Request.ServerVariables("HTTP_X_FORWARDED_FOR")
这个东西返回的值有很多可能
1.空值 这通常是用户没有使用代理.
2.一个合法的ip地址 这表明用户使用了代理
3.多个合法ip构成的字符串比如
202.112.14.151,202.112.14.161
而且不止是两个还有可能更多.这通常发生在使用了多层代理的情况下.
对于1,2 通常程序都能很好的处理,对于第3个,一些编码函数就要出错。
网上很多ip地址编码采用的是类似下面的函数
function IpEncode(byval uip)
if isnull(uip) or uip="" then
IpEncode=0
else
dim ary_ip,n
ary_ip=split(trim(uip),".")
n=ubound(ary_ip)
if n=3 then
IpEncode=ary_ip(0)*256*256*256+ary_ip(1)*65536+ary_ip(2)*256+ary_ip(3)
else
IpEncode=0
end if
end if
end function
这样编码后的数字将是0
解码后ip地址当然0.0.0.0这种奇怪的地址...