<%
'=========================================================
' QQWry.DAT 利用程序 修改自互联网流传代码
' 本类在ASP环境中使用纯真版QQWry.dat通过完美测试
' 如果您的服务器环境不支持ADodb.Stream,将无法使用此程序
' 推荐使用纯真数据库,更新也方便
' ========================================================
' ============================================
' 返回IP信息
' ============================================
Function Look_Ip(IP)
Dim Wry, IPType, QQWryVersion, IpCounter
' 设置类对象
Set Wry = New TQQWry
' 开始搜索,并返回搜索结果
' 您可以根据 QQWry(IP) 返回值来判断该IP地址在数据库中是否存在,如果不存在可以执行其他的一些操作
' 比如您自建一个数据库作为追捕等,这里我就不详细说明了
IPType = Wry.QQWry(IP)
'Tibet代码
if IPType = 0 then
if instr(Wry.localStr,"网通")<>0 then
Look_Ip = "document.write(""网通"");"
else
Look_Ip = "document.write(""电信"");"
end if
else
Look_Ip = "document.write(""电信"");"
end if
Exit Function
'Tibet代码
' Country:国家地区字段
' LocalStr:省市及其他信息字段
Look_Ip = Wry.Country & " " & Wry.LocalStr
End Function
' ============================================
' 返回IP信息 JS调用
' ============================================
Function GetIpInfoAv(IP, sType)
Dim Wry, IPType
Set Wry = New TQQWry
IPType = Wry.QQWry(IP)
Select Case sType
Case 1 GetIpInfoAv = "document.write(""" & IP & """);"
Case 2 GetIpInfoAv = "document.write(""" & Wry.Country & """);"
Case 3 GetIpInfoAv = "document.write(""" & Wry.LocalStr & """);"
Case Else GetIpInfoAv = "document.write(""您来自:" & IP & " 所在区域:" & Wry.Country & " " & Wry.LocalStr & """);"
End Select
End Function
' ============================================
' 返回QQWry信息(QQWry.Dat版本以及记录条数)
' ============================================
Function WryInfo()
Dim Wry, IPType, QQWry(1)
' 设置类对象
Set Wry = New TQQWry
IPType = Wry.QQWry("255.255.255.255")
' 读取数据库版本信息
QQWry(0) = Wry.Country & " " & Wry.LocalStr
' 读取数据库IP地址数目
QQWry(1) = Wry.RecordCount + 1
WryInfo = QQWry
End Function
' ============================================
' IP物理定位搜索类
' ============================================
Class TQQWry
' ============================================
' 变量声名
' ============================================
Dim Country, LocalStr, Buf, OffSet
Private StartIP, EndIP, CountryFlag
Public QQWryFile
Public FirstStartIP, LastStartIP, RecordCount
Private Stream, EndIPOff
' ============================================
' 类模块初始化
' ============================================
Private Sub Class_Initialize
Country   = ""
LocalStr   = ""
StartIP   = 0
EndIP    = 0
CountryFlag  = 0
FirstStartIP  = 0
LastStartIP  = 0
EndIPOff   = 0
QQWryFile = Server.MapPath("QQWry.dat") 'QQ IP库路径,要转换成物理路径
End Sub
' ============================================
' IP地址转换成整数
' ============================================
Function IPToInt(IP)
Dim IPArray, i
IPArray = Split(IP, ".", -1)
FOr i = 0 to 3
If Not IsNumeric(IPArray(i)) Then IPArray(i) = 0
If CInt(IPArray(i)) < 0 Then IPArray(i) = Abs(CInt(IPArray(i)))
If CInt(IPArray(i)) > 255 Then IPArray(i) = 255
Next
IPToInt = (CInt(IPArray(0))*256*256*256) + (CInt(IPArray(1))*256*256) + (CInt(IPArray(2))*256) + CInt(IPArray(3))
End Function
' ============================================
' 整数逆转IP地址
' ============================================
Function IntToIP(IntValue)
p4 = IntValue - Fix(IntValue/256)*256
IntValue = (IntValue-p4)/256
p3 = IntValue - Fix(IntValue/256)*256
IntValue = (IntValue-p3)/256
p2 = IntValue - Fix(IntValue/256)*256
IntValue = (IntValue - p2)/256
p1 = IntValue
IntToIP = Cstr(p1) & "." & Cstr(p2) & "." & Cstr(p3) & "." & Cstr(p4)
End Function
' ============================================
' 获取开始IP位置
' ============================================
Private Function GetStartIP(RecNo)
OffSet = FirstStartIP + RecNo * 7
Stream.Position = OffSet
Buf = Stream.Read(7)
EndIPOff = AscB(MidB(Buf, 5, 1)) + (AscB(MidB(Buf, 6, 1))*256) + (AscB(MidB(Buf, 7, 1))*256*256)
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)
GetStartIP = StartIP
End Function
' ============================================
' 获取结束IP位置
' ============================================
Private Function GetEndIP()
Stream.Position = EndIPOff
Buf = Stream.Read(5)
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)
CountryFlag = AscB(MidB(Buf, 5, 1))
GetEndIP = EndIP
End Function
' ============================================
' 获取地域信息,包含国家和和省市
' ============================================
Private Sub GetCountry(IP)
If (CountryFlag = 1 or CountryFlag = 2) Then
Country = GetFlagStr(EndIPOff + 4)
If CountryFlag = 1 Then
LocalStr = GetFlagStr(Stream.Position)
' 以下用来获取数据库版本信息
If IP >= IPToInt("255.255.255.0") And IP <= IPToInt("255.255.255.255") Then
LocalStr = GetFlagStr(EndIPOff + 21)
Country = GetFlagStr(EndIPOff + 12)
End If
Else
LocalStr = GetFlagStr(EndIPOff + 8)
End If
Else
Country = GetFlagStr(EndIPOff + 4)
LocalStr = GetFlagStr(Stream.Position)
End If
' 过滤数据库中的无用信息
Country = Trim(Country)
LocalStr = Trim(LocalStr)
If InStr(Country, "CZ88.NET") Then Country = "114XP.CN"
If InStr(LocalStr, "CZ88.NET") Then LocalStr = "114XP.CN"
End Sub
' ============================================
' 获取IP地址标识符
' ============================================
Private Function GetFlagStr(OffSet)
Dim Flag
Flag = 0
Do While (True)
Stream.Position = OffSet
Flag = AscB(Stream.Read(1))
If(Flag = 1 or Flag = 2 ) Then
Buf = Stream.Read(3)
If (Flag = 2 ) Then
CountryFlag = 2
EndIPOff = OffSet - 4
End If
OffSet = AscB(MidB(Buf, 1, 1)) + (AscB(MidB(Buf, 2, 1))*256) + (AscB(MidB(Buf, 3, 1))*256*256)
Else
Exit Do
End If
Loop
If (OffSet < 12 ) Then
GetFlagStr = ""
Else
Stream.Position = OffSet
GetFlagStr = GetStr()
End If
End Function
' ============================================
' 获取字串信息
' ============================================
Private Function GetStr()
Dim c
GetStr = ""
Do While (True)
c = AscB(Stream.Read(1))
If (c = 0) Then Exit Do
'如果是双字节,就进行高字节在结合低字节合成一个字符
If c > 127 Then
If Stream.EOS Then Exit Do
GetStr = GetStr & Chr(AscW(ChrB(AscB(Stream.Read(1))) & ChrB(C)))
Else
GetStr = GetStr & Chr(c)
End If
Loop
End Function
' ============================================
' 核心函数,执行IP搜索
' ============================================
Public Function QQWry(DotIP)
Dim IP, nRet
Dim RangB, RangE, RecNo
IP = IPToInt (DotIP)
Set Stream = CreateObject("ADodb.Stream")
Stream.Mode = 3
Stream.Type = 1
Stream.Open
Stream.LoadFromFile QQWryFile
Stream.Position = 0
Buf = Stream.Read(8)
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)
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)
RecordCount = Int((LastStartIP - FirstStartIP)/7)
' 在数据库中找不到任何IP地址
If (RecordCount <= 1) Then
Country = "未知"
QQWry = 2
Exit Function
End If
RangB = 0
RangE = RecordCount
Do While (RangB < (RangE - 1))
RecNo = Int((RangB + RangE)/2)
Call GetStartIP (RecNo)
If (IP = StartIP) Then
RangB = RecNo
Exit Do
End If
If (IP > StartIP) Then
RangB = RecNo
Else
RangE = RecNo
End If
Loop
Call GetStartIP(RangB)
Call GetEndIP()
If (StartIP <= IP) And ( EndIP >= IP) Then
' 没有找到
nRet = 0
Else
' 正常
nRet = 3
End If
Call GetCountry(IP)
QQWry = nRet
End Function
' ============================================
' 类终结
' ============================================
Private Sub Class_Terminate
On ErrOr Resume Next
Stream.Close
If Err Then Err.Clear
Set Stream = Nothing
End Sub
End Class
%>
<% '——————调用方法 ——————%>
<!--
<%=Look_Ip("...ip...")%>
<%=GetIpInfoAv("...ip...",0)%>
-->
<% '——————0是显示样式类型——————%>
<%
set ip = request.ServerVariables("REMOTE_ADDR")
'ip = "...ip..."
response.Write Look_Ip(ip)
%>

asp读取QQwry.dat相关推荐

  1. 【java】java获取ip地址(读取QQWry.dat文件形式)

    该工具类以读取本地纯真IP地址库实现,缺点不易更新 IPSeekerUtil.java 工具类 package com.gfan.yyq.yyqs.utils;import java.io.File; ...

  2. php qqwry.dat_php读取qqwry.dat ip地址数据库文件程序

    文章先来介绍关于qqwry.dat的文件内容结构然后根据它的特点我们可写出读取qqwry.dat ip库的内容找到我们想要的内容. 首先看看QQWry.Data文件的内容结构 ,以及解读方式 . 一. ...

  3. Java之——读取qqwry.dat IP数据库

    转载请注明出处:https://blog.csdn.net/l1028386804/article/details/80198896 一.概述 qqwry.dat IP数据库算是IP地址库中相对来说比 ...

  4. C#读取QQWry.Dat文件实现IP查询

    QQWry数据库下载地址:http://download.csdn.net/detail/fwj380891124/4385554 using System;using System.Collecti ...

  5. php qqwry.dat_php读取qqwry.dat ip地址数据库文件程序

    首先看看QQWry.Data文件的内容结构以及解读方式. 一.文件结构 文件主要分三个结构 1.文件头,8个字节:2.数据记录区,不定长度:3.索引区,长度为 7 的整数倍: 二.文件头 文件头的8个 ...

  6. java读取纯真IP数据库qqwry.dat的源代码

    java读取纯真IP数据库QQwry.dat的源代码,要运行此程序必须有 到网上下载QQwry.dat,下载地址 http://www.cz88.net/down/   由于太大,我这里就不提供了. ...

  7. java 通过 qqwry.dat 解析ip所在地区,qqwry最好隔一段时间更换一个最新的文件

    IPEntry.java package com.jk.utils.readDat;/** * * 一条IP范围记录,不仅包括国家和区域,也包括起始IP和结束IP * */ public class ...

  8. php qqwry.dat_php读取操作IP地址数据库文件QQWry.dat

    我们统计流量的时候需要可以获取用户ip,根据用户ip之后可以通过纯ip真数据库QQWry.dat,获取出用户IP 所在的地理位置,这样可以做出更有意义的统计信息. QQWry.dat请自行搜索下载. ...

  9. mysql 纯真ip 导出dat_C# 读取纯真IP数据库QQWry.dat获取地区信息

    using System; using System.Collections.Generic; using System.Text; using System.IO; namespace 纯真IP数据 ...

最新文章

  1. OpenYurt 开箱测评 | 一键让原生 K8s 集群具备边缘计算能力
  2. layui select下拉框改变之 change 监听事件
  3. 属性,类方法,静态方法,反射
  4. 许家印帮贾跃亭广州拿地造车,这是要翻身的节奏吗?
  5. 高段位产品经理必须掌握的商业模式分析该怎么做?
  6. xss漏洞php注射实战,利用XSS渗透DISCUZ 6.1.0实战
  7. A. Gamer Hemose
  8. ZigBee MAC层(上)
  9. ES基础命令(参照mysql)
  10. 数据库字段与属性的关系是什么?
  11. javascript 的module 模块化
  12. 自适应t分布与动态边界策略改进的算术优化算法
  13. 晶体管电路设计---MOS管与三极管特性
  14. vue3前端项目引入iconfont阿里图标
  15. eclipse没有web项目
  16. aka名字_想给Aka征集一个中文名字
  17. clientX,offsetX,pageX,screenX的异同以Chrome浏览器测试
  18. PHP 图片上传 图片压缩
  19. android 如何查询电话当中的联系人,并查询出联系次数
  20. C++实现简易计算器(正则表达式计算)

热门文章

  1. 2022年全国大学生数学建模竞赛E题目-小批量物料生产安排详解+思路+Python代码时序预测模型(三)
  2. 各种注意事项集合(to be continued)
  3. EMC组建BRS部门 让备份不再成为困扰
  4. 南京邮电大学计算机学硕2021,南京邮电大学2021年硕士研究生拟录取名单
  5. Linux 的目录树
  6. es使用教程之_score(评分)介绍
  7. android 根文件系统,Android根文件系统相关应用介绍
  8. 假面舞会狂欢节·朗瀚威 | 艺术品化的meme:以传播促进流通
  9. 什么是ASR、TTS?
  10. js中ES6新增的数组方法reduce(),和数组去重,降维。