<%
'========================================
'Devuelve la información de IP disp_ipaddressData (IP, 0)
'========================================
Función look_ip (ip)
Dim ...
'Configuración del objeto de clase
Estación establecida = nuevo tqqwry
'Inicie la búsqueda y devuelva los resultados de búsqueda
'Puede determinar si la dirección IP existe en la base de datos en función del valor de retorno QQWRY (IP), y algunas otras operaciones se pueden realizar si no hay existencia
'Por ejemplo, creó una base de datos como cacería, no explicaré en detalle aquí
Ippype = wry.qqwry (ip)
'País: campos nacionales y regionales
'Localstr: Provincial y Municipal y otros campos de información
Apartar_ip = wry.country & & wry.localstr
'' 'Look_ip = wry.country &
Función final
'========================================
'Regresar a la información de IP JS Llame
'========================================
Función disp_ipaddressData (IP, estilo)
DiMover, iltype
Estación establecida = nuevo tqqwry
Ippype = wry.qqwry (ip)
Seleccionar estilo de caja
Caso 1 disp_ipaddressData = ip
Caso 2 disp_ipaddressData = station.country
Caso 3 disp_ipaddressData = wry.localstr
'Case else disp_ipaddressData = wry.country & & wry.localst
Case else disp_ipaddressData = wry.country
Final seleccionar
Función final
'========================================
'Volver a la información QQWRY
'========================================
Función wryinfo ()
DIMOVER, IPTYPE, QQWRY_TEM (0), QQWRY_TEM1 (1)
'Configuración del objeto de clase
Estación establecida = nuevo tqqwry
Ippype = wry.qqwry (255.255.255.254)
'Lea la información de la versión de la base de datos
Qqwry_tem (0) = wry.country & & wry.localstr
'Lea el número de direcciones IP de la base de datos
Qqwry_tem1 (1) = wry.recordCount + 1
Wryinfo = qqwry_tem (0) y qqwry_tem1 (1)
Función final
Clase TQQWRY
'========================================
'Reputación variable
'========================================
Dim Country, Localstr, BUF, Offset
Startip privado, endip, countryflag
Public Qqwryfile
Public FirstStartip, LastStartip, RecordCount
Transmisión privada, endipoff
'========================================
'Inicialización del módulo de clase
'========================================
Sub class_initialize privado
País =
LocalStr =
Startip = 0
Endip = 0
CountryFlag = 0
FirstStartip = 0
LastStartip = 0
Endipoff = 0
Qqwryfile = server.mappath (/data/qqwry.dat) 'QQ ruta de inventario IP inocente, para cambiar a su ruta
Final
'========================================
'La dirección IP se convierte en entero
'========================================
Función iptoint (IP)
Dim iparray, yo
IpArray = Split (IP,., -1)
Para i = 0 a 3
Si no es isnumérico (ipArray (i)), entonces ipArray (i) = 0
Si cint (iparray (i)) <0 thatn ipArray (i) = abs (cint (iparray (i))))
If cint (iparray (i))> 255 que iparray (i) = 255
Próximo
IPtoint = (cint (iparray (0))*256*256*256) + (cint (iparray (1))*256*256) + (cint (iparray (2))*256) + cint (iparray (3) Curar
Función final
'========================================
'Nuestra dirección IP integera que invierte
'========================================
Función inttoip (intValue)
p4 = int value -fix (intValue/256)*256
IntValue = (intValue-P4)/256
p3 = int value -fix (intValue/256)*256
IntValue = (intValue-P3)/256
p2 = int value -fix (intValue/256)*256
IntValue = (intValue -p2)/256
P1 = valor int
Intoip = Cstr (P1) &.
Función final
'========================================
'Obtenga la ubicación de inicio de IP
'========================================
Funciones privadas 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
Función final
'========================================
'Obtenga la posición IP final
'========================================
Función privada geetedip ()
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
Función final
'========================================
'Obtenga información regional, incluido el país y el provincial y las ciudades
'========================================
Sub Getcountry privado (IP)
If (countryflag = 1 o countryflag = 2) entonces
País = getFlagstr (endipoff + 4)
Si countryflag = 1 entonces
LocalStr = getFlagStr (stream.position)
'Lo siguiente se utiliza para obtener la información de la versión de la base de datos
Si IP> = IPToint (255.255.255.0) e IP <= IPToint (255.255.255.255) entonces
LocalStr = getFlagStr (endipoff + 21)
País = getFlagStr (endipoff + 12)
Final si
Demás
LocalStr = getFlagStr (endipoff + 8)
Final si
Demás
País = getFlagstr (endipoff + 4)
LocalStr = getFlagStr (stream.position)
Final si
'Filtrar la información inútil en la base de datos
País = TRIM (País)
LocalStr = TRIM (LocalStr)
If instrer (país, cz88.net) luego país =
If instrer (localtr, cz88.net) entonces localtr =
Final
'========================================
'Obtenga el identificador de la dirección IP
'========================================
Función privada getFlagStr (offset)
Bandera de duendidad
Bandera = 0
Hacer todo (verdadero)
Stream.position = offset
Flag = ascb (stream.read (1))
If (bandera = 1 o bandera = 2) entonces
Buf = stream.read (3)
If (bandera = 2) entonces
CountryFlag = 2
Endipoff = offset -4
Final si
Offset = ASCB (MidB (BUF, 1, 1)) + (ASCB (MidB (BUF, 2, 1))*256) + (ASCB (MidB (BUF, 3, 1))*256*256)
Demás
Salir
Final si
Bucle
If (offset <12) entonces
GetFlagStr =
Demás
Stream.position = offset
GetFlagStr = getStr ()
Final si
Función final
'========================================
'Obtenga la información de la cadena
'========================================
Función privada getTr ()
Dim C
Gettr =
Hacer todo (verdadero)
c = ascb (stream.read (1))
If (c = 0) entonces salga hacer
'Si es un dos byte, un byte alto se combina en combinación con una síntesis de byte baja de un carácter
Si c> 127 entonces
Si stream.eos la salida
GetTR = getTR & chr (ASCW (CHRB (ASCB (Stream.read (1))) y CHRB (C)
Demás
GetTR = getTR & chr (c)
Final si
Bucle
Función final
'========================================
'Función central, ejecutar búsqueda de IP
'========================================
Función pública qqwry (dotip)
Dim IP, nret
Dim rangb, rango, rango, rango
Ip = iptoint (dotip)
Set stream = createObject (ADODB.Stream)
Stream.mode = 3
Stream.type = 1
Transmisión. Abre
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
'No puedo encontrar ninguna dirección IP en la base de datos
If (RecordCount <= 1) entonces
País = desconocido
Qqwry = 2
Función de salida
Final si
Rangb = 0
Rango = RecordCount
Hacer por qué (rangb <(rango -1))
Rangb + rango/2)
Llame a GetStartip (Recno)
If (ip = startip) entonces
Rangb = recino
Salir
Final si
If (ip> startip) entonces
Rangb = recino
Demás
Rango = RECNO
Final si
Bucle
Llame a GetStartip (rangb)
Llame a getendip ()
If (startip <= ip) y (endip> = ip) entonces
'No se encuentra
nret = 0
Demás
' normal
nret = 3
Final si
Llame a GetCountry (IP)
Qqwry = nret
Función final
'========================================
'Final de clase
'========================================
Sub class_merminate privado
En el currículum de error siguiente
Transmisión. Clara
Si err entonces err.clear
Establecer stream = nada
Final
Clase final
%>