当前位置: 代码迷 >> ASP >> 紧急关于显示用户IP来源的思考
  详细解决方案

紧急关于显示用户IP来源的思考

热度:87   发布时间:2012-03-14 12:01:13.0
求救紧急:关于显示用户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
  相关解决方案