找回密码
 注册
广告投放 虚位以待【阿里云】2核2G云新老同享 99元/年,续费同价做网站就用糖果主机-sugarhosts.comJtti.com-新加坡服务器,美国服务器,香港服务器
查看: 914|回复: 13

纯真IP数据库文件“QQWry.Dat”如何在ASP网页中调用啊?

[复制链接]
发表于 2007 年 9 月 13 日 17:52:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
如题,想实现根据IP来源显示地理位置等信息,
谢谢!
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
发表于 2007 年 9 月 13 日 17:59:05 | 显示全部楼层
【腾讯云】2核2G云服务器新老同享 99元/年,续费同价
以前有一个asp的IP显示签名的,用的IP库应该是纯真或者珊瑚虫的..
  1. <%
  2. ' ============================================
  3. ' 返回IP信息
  4. ' ============================================
  5. Function Look_Ip(IP)
  6.         Dim Wry, IPType, QQWryVersion, IpCounter
  7.         ' 设置类对象
  8.         Set Wry = New TQQWry
  9.         ' 开始搜索,并返回搜索结果
  10.         ' 您可以根据 QQWry(IP) 返回值来判断该IP地址在数据库中是否存在,如果不存在可以执行其他的一些操作
  11.         ' 比如您自建一个数据库作为追捕等,这里我就不详细说明了
  12.         IPType = Wry.QQWry(IP)
  13.         ' Country:国家地区字段
  14.         ' LocalStr:省市及其他信息字段
  15.         Look_Ip = Wry.Country & " " & Wry.LocalStr
  16. End Function
  17. ' ============================================
  18. ' 返回IP信息 JS调用
  19. ' ============================================
  20. Function GetIpInfoAv(IP, sType)
  21.         Dim Wry, IPType
  22.         Set Wry = New TQQWry
  23.         IPType = Wry.QQWry(IP)
  24.         Select Case sType
  25.                 Case 1 GetIpInfoAv = "document.write(""" & IP & """);"
  26.                 Case 2 GetIpInfoAv = "document.write(""" & Wry.Country & """);"
  27.                 Case 3 GetIpInfoAv = "document.write(""" & Wry.LocalStr & """);"
  28.                 Case Else GetIpInfoAv = "document.write(""您来自:" & IP & " 所在区域:" & Wry.Country & " " & Wry.LocalStr & """);"
  29.         End Select
  30. End Function
  31. ' ============================================
  32. ' 返回QQWry信息
  33. ' ============================================
  34. Function WryInfo()
  35.         Dim Wry, IPType, QQWry(1)
  36.         ' 设置类对象
  37.         Set Wry = New TQQWry
  38.         IPType = Wry.QQWry("255.255.255.255")
  39.         ' 读取数据库版本信息
  40.         QQWry(0) = Wry.Country & " " & Wry.LocalStr
  41.         ' 读取数据库IP地址数目
  42.         QQWry(1) = Wry.RecordCount + 1
  43.         WryInfo = QQWry
  44. End Function
  45. ' ============================================
  46. ' P物理定位搜索类
  47. ' ============================================
  48. Class TQQWry
  49.         ' ============================================
  50.         ' 变量声名
  51.         ' ============================================
  52.         Dim Country, LocalStr, Buf, OffSet
  53.         Private StartIP, EndIP, CountryFlag
  54.         Public QQWryFile
  55.         Public FirstStartIP, LastStartIP, RecordCount
  56.         Private Stream, EndIPOff
  57.         ' ============================================
  58.         ' 类模块初始化
  59.         ' ============================================
  60.         Private Sub Class_Initialize
  61.                 Country                 = ""
  62.                 LocalStr                 = ""
  63.                 StartIP                 = 0
  64.                 EndIP                         = 0
  65.                 CountryFlag         = 0
  66.                 FirstStartIP         = 0
  67.                 LastStartIP         = 0
  68.                 EndIPOff                 = 0
  69.                 QQWryFile = Server.MapPath("DataBase/QQWry.dat") 'QQ IP库路径,要转换成物理路径
  70.         End Sub
  71.         ' ============================================
  72.         ' IP地址转换成整数
  73.         ' ============================================
  74.         Function IPToInt(IP)
  75.                 Dim IPArray, i
  76.                 IPArray = Split(IP, ".", -1)
  77.                 FOr i = 0 to 3
  78.                         If Not IsNumeric(IPArray(i)) Then IPArray(i) = 0
  79.                         If CInt(IPArray(i)) < 0 Then IPArray(i) = Abs(CInt(IPArray(i)))
  80.                         If CInt(IPArray(i)) > 255 Then IPArray(i) = 255
  81.                 Next
  82.                 IPToInt = (CInt(IPArray(0))*256*256*256) + (CInt(IPArray(1))*256*256) + (CInt(IPArray(2))*256) + CInt(IPArray(3))
  83.         End Function
  84.         ' ============================================
  85.         ' 整数逆转IP地址
  86.         ' ============================================
  87.         Function IntToIP(IntValue)
  88.                 p4 = IntValue - Fix(IntValue/256)*256
  89.                 IntValue = (IntValue-p4)/256
  90.                 p3 = IntValue - Fix(IntValue/256)*256
  91.                 IntValue = (IntValue-p3)/256
  92.                 p2 = IntValue - Fix(IntValue/256)*256
  93.                 IntValue = (IntValue - p2)/256
  94.                 p1 = IntValue
  95.                 IntToIP = Cstr(p1) & "." & Cstr(p2) & "." & Cstr(p3) & "." & Cstr(p4)
  96.         End Function
  97.         ' ============================================
  98.         ' 获取开始IP位置
  99.         ' ============================================
  100.         Private Function GetStartIP(RecNo)
  101.                 OffSet = FirstStartIP + RecNo * 7
  102.                 Stream.Position = OffSet
  103.                 Buf = Stream.Read(7)
  104.                
  105.                 EndIPOff = AscB(MidB(Buf, 5, 1)) + (AscB(MidB(Buf, 6, 1))*256) + (AscB(MidB(Buf, 7, 1))*256*256)
  106.                 StartIP  = AscB(MidB(Buf, 1, 1)) + (AscB(MidB(Buf, 2, 1))*256) + (AscB(MidB(Buf, 3, 1))*256*256) + (AscB(MidB(Buf, 4, 1))*256*256*256)
  107.                 GetStartIP = StartIP
  108.         End Function
  109.         ' ============================================
  110.         ' 获取结束IP位置
  111.         ' ============================================
  112.         Private Function GetEndIP()
  113.                 Stream.Position = EndIPOff
  114.                 Buf = Stream.Read(5)
  115.                 EndIP = AscB(MidB(Buf, 1, 1)) + (AscB(MidB(Buf, 2, 1))*256) + (AscB(MidB(Buf, 3, 1))*256*256) + (AscB(MidB(Buf, 4, 1))*256*256*256)
  116.                 CountryFlag = AscB(MidB(Buf, 5, 1))
  117.                 GetEndIP = EndIP
  118.         End Function
  119.         ' ============================================
  120.         ' 获取地域信息,包含国家和和省市
  121.         ' ============================================
  122.         Private Sub GetCountry(IP)
  123.                 If (CountryFlag = 1 Or CountryFlag = 2) Then
  124.                         Country = GetFlagStr(EndIPOff + 4)
  125.                         If CountryFlag = 1 Then
  126.                                 LocalStr = GetFlagStr(Stream.Position)
  127.                                 ' 以下用来获取数据库版本信息
  128.                                 If IP >= IPToInt("255.255.255.0") And IP <= IPToInt("255.255.255.255") Then
  129.                                         LocalStr = GetFlagStr(EndIPOff + 21)
  130.                                         Country = GetFlagStr(EndIPOff + 12)
  131.                                 End If
  132.                         Else
  133.                                 LocalStr = GetFlagStr(EndIPOff + 8)
  134.                         End If
  135.                 Else
  136.                         Country = GetFlagStr(EndIPOff + 4)
  137.                         LocalStr = GetFlagStr(Stream.Position)
  138.                 End If
  139.                 ' 过滤数据库中的无用信息
  140.                 Country = Trim(Country)
  141.                 LocalStr = Trim(LocalStr)
  142.                 If InStr(Country, "CZ88.NET") Then Country = "GZ110.CN"
  143.                 If InStr(LocalStr, "CZ88.NET") Then LocalStr = "GZ110.CN"
  144.         End Sub
  145.         ' ============================================
  146.         ' 获取IP地址标识符
  147.         ' ============================================
  148.         Private Function GetFlagStr(OffSet)
  149.                 Dim Flag
  150.                 Flag = 0
  151.                 Do While (True)
  152.                         Stream.Position = OffSet
  153.                         Flag = AscB(Stream.Read(1))
  154.                         If(Flag = 1 Or Flag = 2 ) Then
  155.                                 Buf = Stream.Read(3)
  156.                                 If (Flag = 2 ) Then
  157.                                         CountryFlag = 2
  158.                                         EndIPOff = OffSet - 4
  159.                                 End If
  160.                                 OffSet = AscB(MidB(Buf, 1, 1)) + (AscB(MidB(Buf, 2, 1))*256) + (AscB(MidB(Buf, 3, 1))*256*256)
  161.                         Else
  162.                                 Exit Do
  163.                         End If
  164.                 Loop
  165.                
  166.                 If (OffSet < 12 ) Then
  167.                         GetFlagStr = ""
  168.                 Else
  169.                         Stream.Position = OffSet
  170.                         GetFlagStr = GetStr()
  171.                 End If
  172.         End Function
  173.         ' ============================================
  174.         ' 获取字串信息
  175.         ' ============================================
  176.         Private Function GetStr()
  177.                 Dim c
  178.                 GetStr = ""
  179.                 Do While (True)
  180.                         c = AscB(Stream.Read(1))
  181.                         If (c = 0) Then Exit Do
  182.                        
  183.                         '如果是双字节,就进行高字节在结合低字节合成一个字符
  184.                         If c > 127 Then
  185.                                 If Stream.EOS Then Exit Do
  186.                                 GetStr = GetStr & Chr(AscW(ChrB(AscB(Stream.Read(1))) & ChrB(C)))
  187.                         Else
  188.                                 GetStr = GetStr & Chr(c)
  189.                         End If
  190.                 Loop
  191.         End Function
  192.         ' ============================================
  193.         ' 核心函数,执行IP搜索
  194.         ' ============================================
  195.         Public Function QQWry(DotIP)
  196.                 Dim IP, nRet
  197.                 Dim RangB, RangE, RecNo
  198.                 IP = IPToInt (DotIP)
  199.                 Set Stream = CreateObject("ADodb.Stream")
  200.                 Stream.Mode = 3
  201.                 Stream.Type = 1
  202.                 Stream.Open
  203.                 Stream.LoadFromFile QQWryFile
  204.                 Stream.Position = 0
  205.                 Buf = Stream.Read(8)
  206.                 FirstStartIP = AscB(MidB(Buf, 1, 1)) + (AscB(MidB(Buf, 2, 1))*256) + (AscB(MidB(Buf, 3, 1))*256*256) + (AscB(MidB(Buf, 4, 1))*256*256*256)
  207.                 LastStartIP  = AscB(MidB(Buf, 5, 1)) + (AscB(MidB(Buf, 6, 1))*256) + (AscB(MidB(Buf, 7, 1))*256*256) + (AscB(MidB(Buf, 8, 1))*256*256*256)
  208.                 RecordCount = Int((LastStartIP - FirstStartIP)/7)
  209.                 ' 在数据库中找不到任何IP地址
  210.                 If (RecordCount <= 1) Then
  211.                         Country = "未知"
  212.                         QQWry = 2
  213.                         Exit Function
  214.                 End If
  215.                 RangB = 0
  216.                 RangE = RecordCount
  217.                 Do While (RangB < (RangE - 1))
  218.                         RecNo = Int((RangB + RangE)/2)
  219.                         Call GetStartIP (RecNo)
  220.                         If (IP = StartIP) Then
  221.                                 RangB = RecNo
  222.                                 Exit Do
  223.                         End If
  224.                         If (IP > StartIP) Then
  225.                                 RangB = RecNo
  226.                         Else
  227.                                 RangE = RecNo
  228.                         End If
  229.                 Loop
  230.                 Call GetStartIP(RangB)
  231.                 Call GetEndIP()
  232.                 If (StartIP <= IP) And ( EndIP >= IP) Then
  233.                         ' 没有找到
  234.                         nRet = 0
  235.                 Else
  236.                         ' 正常
  237.                         nRet = 3
  238.                 End If
  239.                 Call GetCountry(IP)
  240.                 QQWry = nRet
  241.         End Function
  242.         ' ============================================
  243.         ' 类终结
  244.         ' ============================================
  245.         Private Sub Class_Terminate
  246.                 On ErrOr Resume Next
  247.                 Stream.Close
  248.                 If Err Then Err.Clear
  249.                 Set Stream = Nothing
  250.         End Sub
  251. End Class
  252. %>
复制代码
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

 楼主| 发表于 2007 年 9 月 13 日 18:12:27 | 显示全部楼层
似乎执行了之后不起作用:

http://www.thelionking.org.cn/ip/ip.asp
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

发表于 2007 年 9 月 13 日 18:12:55 | 显示全部楼层
不会搞。。。
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

发表于 2007 年 9 月 13 日 18:14:16 | 显示全部楼层
噢,老天——您要找哪个文件?!
  在此服务器上未找到您所需要的文件,也许是因为您把网址给输错了。请仔细检查您的拼写然后再试一次。或者,请通过 www.TheLionKing.org.cn 访问该服务器的根目录来查看所有可用选项。



网站维护:Frank
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

 楼主| 发表于 2007 年 9 月 13 日 18:16:12 | 显示全部楼层
楼上,地址换了
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

发表于 2007 年 9 月 13 日 18:38:27 | 显示全部楼层
【腾讯云】2核2G云服务器新老同享 99元/年,续费同价
需要转换成Access吧
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

发表于 2007 年 9 月 13 日 18:59:43 | 显示全部楼层
用2楼的不用转成access的,wry.dat本身好像就是excel文件
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

发表于 2007 年 9 月 13 日 19:05:31 | 显示全部楼层
鸭鸭现身了
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

发表于 2007 年 9 月 13 日 20:29:58 | 显示全部楼层
  1. <%@ LANGUAGE = "VBScript" CodePage = "936"%>
  2. <%
  3. '强制声明变量打开,如果变量不声明则出错误
  4. Option Explicit
  5. 'Asp程序缓冲区打开
  6. Response.Buffer = True
  7. '设置Session失效时间
  8. Session.Timeout = 20
  9. Function Format_Ip(ip)
  10.         Dim a, i, Sip
  11.         a = Split(ip, ".")
  12.         If UBound(a) <> 3 Then Format_Ip = 0 : Exit Function
  13.         For i = 0 To 3
  14.                 Sip= Sip + CInt(a(i)) * (256^(3-i))
  15.                 Format_Ip = Format_Ip & String(3-Len(a(i)),"0") & a(i) & "."
  16.         Next
  17.         Format_Ip = Left(Format_Ip, 15)
  18. End Function
  19. %>
  20. <!--#include file="Inc/iXs_Ip.asp" -->
  21. <%
  22. Dim ReqIP
  23. ReqIP = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
  24. If ReqIP = "" Or IsNull(ReqIP) Then ReqIP = Request.ServerVariables("REMOTE_ADDR")
  25. Response.Write(Look_Ip(Format_Ip(ReqIP)))
  26. %>
复制代码

里边垃圾代码其实很多,不用的方法自己看着清理下.
我这个是用的别人写好的类..数据库我用了珊瑚虫的,测试通过
Jgwy.Com - Free Web Hosting Guide & Directory In China since 2001! Jgwy.Net-Jglt.Net
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|金光论坛

GMT+8, 2025 年 2 月 5 日 10:42 , Processed in 0.032330 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表