求救紧急:关于显示用户IP来源的思考
小弟最新做网页碰到了一个问题,就是在做一个网上常看见的很多页面会显示
尊敬的xxx,你的IP是XX,您来自XX,显示IP比较简单,没有任何问题,关键在于后来我就在网上下载到了一个access的IP数据库,里面有IP开始段(文本)IP结束段(文本)地址
开始段(数值型)结束段(数值),当然后面两个都是由于前面转化得来的。
然后我就设计了一个函数,可以实现把IP地址由类似192.168.1.1 转化成3232xxxxxxx 然后再通过sql查询语句查找位于表中该段数字所处的位置所对应的地址
3232XXXXXXXX并且能正常显示,如 iIp=cacuIp( "192.168.1.1 ")
Response.Write iIp
结果我把 userip=Request.ServerVariables( "Remote_ADDR ")
response.Write cacuIp( "userip ")结果就出了问题,结果是0?为什么不是一个很长的数字呢? 后来经过我分析 可能是Request.ServerVariables 的数据类型是字符串型 并且通过a=VarType(userip)
response.Write a 测试返回数值为8 即为字串 那么由于IP转换所得的数字偏大 连长整也不够用 就想通过 CDbl转化为双精度型,结果发现转化后仍然是字串,怎么回事????????!!!!!!
希望各位能指点迷津! 或者我从一开始就想错了
拜托了! 如果有做过这个东西的还有源程序给小弟参考一下的 烦发到bear3rd@163.com 谢谢了!
------解决方案--------------------没做过,不过你可以反过来试着将数据库内的数据转换成字符串再比较!
貌似可行
------解决方案--------------------Public Function CLongIP(ByVal asNewIP)
On Error Resume Next
Dim lnResults
Dim lnIndex
Dim lnIpAry
lnIpAry = Split(asNewIP, ". ", 4)
For lnIndex = 0 To 3
If Not lnIndex = 3 Then
lnIpAry(lnIndex) = lnIpAry(lnIndex) * (256 ^ (3 - lnIndex))
End If
lnResults = lnResults + lnIpAry(lnIndex)
Next
CLongIP = lnResults
lnResults = 0
End Function
------解决方案--------------------Access:字段设成双精度型
MS SQL:字段设成bigint