<%
'========================================
'Retornar Informações IP Disp_ipaddressData (IP, 0)
'========================================
Função look_ip (ip)
Dim ...
'Configurando o objeto de classe
Estação de conjunto = novo tqqwry
'Inicie a pesquisa e retorne os resultados da pesquisa
'Você pode determinar se o endereço IP existe no banco de dados com base no valor de retorno QQWry (IP), e algumas outras operações podem ser realizadas se não houver existência
'Por exemplo, você construiu um banco de dados como uma caçada, não vou explicar em detalhes aqui
Iptype = wry.qqwry (ip)
'País: campos nacionais e regionais
'Localstr: Campos de informação provinciais e municipais e outros
Look_ip = wry.country & & wry.localstr
'' 'Look_ip = wry.country &
Função final
'========================================
'Retorne à chamada IP Information JS
'========================================
Function DISP_IPADDRESSDATA (IP, estilo)
Iltype, Iltype
Estação de conjunto = novo tqqwry
Iptype = wry.qqwry (ip)
Selecione estilo de caixa
Caso 1 DISP_IPADDRESSDATA = IP
Caso 2 DISP_IPADDRESSDATA = Station.Country
Caso 3 DISP_IPADDRESSDATA = Wry.localstr
'Case else DISP_IPADDRESSDATA = Wry.country & & Wry.localstr
Caso mais disp_ipaddressdata = wry.country
Final Selecione
Função final
'========================================
'Retornar informações QQWry
'========================================
Função wryinfo ()
Iptype, qqwry_tem (0), qqwry_tem1 (1)
'Configurando o objeto de classe
Estação de conjunto = novo tqqwry
Iptype = wry.qqwry (255.255.255.254)
'Leia as informações da versão do banco de dados
Qqwry_tem (0) = wry.country & & wry.localstr
'Leia o número de endereços IP do banco de dados
Qqwry_tem1 (1) = wry.recordCount + 1
Wryinfo = qqwry_tem (0) e qqwry_tem1 (1)
Função final
Classe TQQWry
'========================================
'Reputação variável
'========================================
País escuro, localtaltrtr, buf, deslocamento
Startip privado, endip, CountryFlag
Qqwryfile público
Public Firststartip, LastStartip, RecordCount
Stream privado, Endipoff
'========================================
'Inicialização do módulo de classe
'========================================
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 Innocent IP Inventory Path, para mudar para o seu caminho
Final sub
'========================================
'Endereço IP convertido em número inteiro
'========================================
Função iPtoint (IP)
Dim ipArray, i
IpArray = split (ip,., -1)
Para i = 0 a 3
Se não é numérico (ipArray (i)) então ipArray (i) = 0
Se cint (ipArray (i)) <0 que não
Se 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) Cura
Função final
'========================================
'Nosso endereço IP de reversão inteira
'========================================
Função inttoip (intvalue)
P4 = int Value -fix (IntValue/256)*256
Intvalue = (intvalue-p4)/256
p3 = int valor -fix (intvalue/256)*256
Intvalue = (intvalue-p3)/256
p2 = int valor -fix (intvalue/256)*256
Intvalue = (intvalue -p2)/256
P1 = INT Valor
INIP = CSTR (P1) &.
Função final
'========================================
'Obtenha o local IP inicial
'========================================
Funções 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
Função final
'========================================
'Obtenha a posição IP final
'========================================
Função 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
Função final
'========================================
'Obtenha informações regionais, incluindo o país e o provincial e as cidades
'========================================
Sub GetCountry privado (IP)
If (countryflag = 1 ou countryflag = 2) então
País = getflagstr (endipoff + 4)
Se CountryFlag = 1 então
Localstr = getFlagstr (Stream.Position)
'O seguinte é usado para obter as informações da versão do banco de dados
Se ip> = iPtoint (255.255.255.0) e ip <= iPtoint (255.255.255.255) Então
Localstr = getFlagstr (Endipoff + 21)
País = getflagstr (endipoff + 12)
Final se
Outro
Localstr = getFlagstr (Endipoff + 8)
Final se
Outro
País = getflagstr (endipoff + 4)
Localstr = getFlagstr (Stream.Position)
Final se
'Filtre as informações inúteis no banco de dados
País = acabamento (país)
Localstr = Trim (Localstr)
Se Instr (país, CZ88.net) então país =
Se Instr (Localstr, Cz88.net) então Localstr =
Final sub
'========================================
'Obtenha o identificador de endereço IP
'========================================
Função privada getflagstr (deslocamento)
Bandeira escura
Sinalizador = 0
Fazer todo (verdadeiro)
Stream.Position = Offset
Flag = ASCB (Stream.Read (1))
If (sinalizador = 1 ou sinalizador = 2) Então
BUF = Stream.read (3)
Se (sinalizador = 2) então
CountryFlag = 2
Endipoff = deslocamento -4
Final se
Offset = ASCB (MIDB (BUF, 1, 1)) + (ASCB (MIDB (BUF, 2, 1))*256) + (ASCB (MIDB (BUF, 3, 1))*256*256)
Outro
Saída do
Final se
Laço
Se (deslocamento <12) então
Getflagstr =
Outro
Stream.Position = Offset
Getflagstr = getStr ()
Final se
Função final
'========================================
'Obtenha a informação da string
'========================================
Função privada getStr ()
Dim c
GetStr =
Fazer todo (verdadeiro)
C = ASCB (Stream.Read (1))
Se (c = 0) então saia
'Se é um byte de dois, um byte alto é combinado em combinação com uma síntese de bytes baixa de um personagem
Se C> 127 então
Se stream.eos a saída faz
GetTr = getStr & chr (ASCW (Chrb (ASCB (Stream.Read (1))) e Chrb (C)
Outro
GetTr = getStr & ch (c)
Final se
Laço
Função final
'========================================
'Função do núcleo, Executar pesquisa de IP
'========================================
Função pública QQWry (DOTIP)
Dim IP, Nret
Dim Rangb, Range, Range, Range
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
'Não consigo encontrar nenhum endereço IP no banco de dados
If (recordCount <= 1) então
País = desconhecido
Qqwry = 2
Função de saída
Final se
Rangb = 0
Range = RecordCount
Faça o porquê (Rangb <(intervalo -1))
Rangb + Range/2)
Ligue para GetStartip (recno)
If (ip = startip) então
Rangb = recino
Saída do
Final se
Se (ip> startip) então
Rangb = recino
Outro
Intervalo = recno
Final se
Laço
Ligue para GetStartip (Rangb)
Ligue para GETENDIP ()
If (startip <= ip) e (endip> = ip) então
Não encontrou
NRET = 0
Outro
' normal
NRET = 3
Final se
Ligue para GetCountry (IP)
Qqwry = nret
Função final
'========================================
'Class End
'========================================
Sub -Class_terminado privado
Em erro de erro em seguida
Stream.Close
Se err, então err.clear
Set Stream = nada
Final sub
Classe final
%>