欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP调用纯真IP库的代码,测试可用

程序员文章站 2022-05-17 16:06:43
<% ============================================ 返回ip信息 disp_ipaddressdata(ip,0) =======...

<%
============================================
返回ip信息 disp_ipaddressdata(ip,0)
============================================
function look_ip(ip)
 dim wry, iptype, qqwryversion, ipcounter
  设置类对象
 set wry = new tqqwry
  开始搜索,并返回搜索结果
  您可以根据 qqwry(ip) 返回值来判断该ip地址在中是否存在,如果不存在可以执行其他的一些操作
  比如您自建一个数据库作为追捕等,这里我就不详细说明了
 iptype = wry.qqwry(ip)
  country:国家地区字段
  localstr:省市及其他信息字段
 look_ip =wry.country & "" & wry.localstr
 look_ip = wry.country & ""
end function
============================================
返回ip信息 js调用
============================================
function disp_ipaddressdata(ip, stype)
 dim wry, iptype
 set wry = new tqqwry
 iptype = wry.qqwry(ip)
 
 select case stype
 case 1 disp_ipaddressdata = ip
 case 2 disp_ipaddressdata = wry.country
 case 3 disp_ipaddressdata = wry.localstr
 case else disp_ipaddressdata = wry.country & "" & wry.localstr
 case else disp_ipaddressdata = wry.country
 end select
end function
============================================
返回qqwry信息
============================================
function wryinfo()
 dim wry, iptype, qqwry_tem(0), qqwry_tem1(1)
  设置类对象
 set wry = new tqqwry
 iptype = wry.qqwry("255.255.255.254")
  读取数据库版本信息
 qqwry_tem(0) = wry.country & " " & wry.localstr
  读取数据库ip地址数目
 qqwry_tem1(1) = wry.recordcount + 1
 wryinfo = qqwry_tem(0)& " " & qqwry_tem1(1)
end function

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("coralwry.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 = ""
 if instr(localstr, "cz88.net") then localstr = ""
 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))