<%
"====================================================
'IP -Informationen zurückgeben disp_ipaddressData (IP, 0)
"====================================================
Funktion Look_IP (IP)
Dunkel ...
'Klassenobjekt einstellen
SET STATION = NEU TQQWRY
'Starten Sie die Suche und geben Sie die Suchergebnisse zurück
„Sie können feststellen, ob die IP -Adresse in der Datenbank basierend auf dem QQWRY -Rückgabewert (IP) vorhanden ist, und einige andere Vorgänge können ausgeführt werden, wenn keine Existenz vorliegt
'Zum Beispiel haben Sie eine Datenbank als Jagd erstellt, ich werde hier nicht im Detail erklären
IpType = Wry.qqwry (IP)
'Land: nationale und regionale Felder
'Einheimischer: Provinziale und kommunale und andere Informationsfelder
Look_IP = Wry.country & & Wry.localstr
'' 'Look_ip = Wry.country &
Endfunktion
"====================================================
'Kehren Sie zu IP -Informationen zurück JS -Anrufe
"====================================================
Funktion disp_ipaddressData (IP, Stil)
Dimover, IlType
SET STATION = NEU TQQWRY
IpType = Wry.qqwry (IP)
Wählen Sie den Fallstil
Fall 1 disp_ipaddressData = ip
Fall 2 disp_ipaddressData = Station.country
Fall 3 disp_ipaddressData = Wry.localstr
'Case sonst disp_ipaddressData = wry.country & & wry.localstr
Fall sonst disp_ipaddressData = wry.country
Ende auswählen
Endfunktion
"====================================================
'Kehren Sie zu QQWRY -Informationen zurück
"====================================================
Funktion Wryinfo ()
Dimover, iptype, qqwry_tem (0), qqwry_tem1 (1)
'Klassenobjekt einstellen
SET STATION = NEU TQQWRY
IpType = Wry.qqwry (255.255.255.254)
'Lesen Sie die Datenbankversionsinformationen
Qqwry_tem (0) = wry.country & & wry.localstr
'Lesen Sie die Anzahl der Datenbank -IP -Adressen
Qqwry_tem1 (1) = wry.recordCount + 1
WryInfo = qqwry_tem (0) & qqwry_tem1 (1)
Endfunktion
Klasse Tqqwry
"====================================================
'Variabler Ruf
"====================================================
Dunkeles Land, Einheimischer, BUF, Offset
Privatstart, Endip, CountryFlag
Öffentliche QQWryFile
Öffentliche FirstStartip, LastStartip, RecordCount
Privatstream, Endipoff
"====================================================
'Klassenmodulinitialisierung
"====================================================
Private sub class_initialize
Land =
Localstr =
StartIp = 0
Endip = 0
CountryFlag = 0
FirstStartip = 0
LastStartip = 0
Endipoff = 0
QqwryFile = server.mappath (/data/qqwry.dat) 'QQ Innocent IP Inventory Pfad, um sich auf Ihren Pfad zu ändern
Ende sub
"====================================================
'IP -Adresse in Ganzzahl konvertieren
"====================================================
Funktion iptoint (IP)
Dim Iparray, ich
IpArray = split (ip,., -1)
Für i = 0 bis 3
Wenn nicht isnumerisch (iparray (i)), dann iparray (i) = 0
Wenn cint (ipArray (i)) <0 ist, dass Iparray (i) = ABS (cint (ipArray (i)))
Wenn cint (iparray (i))> 255 das iparray (i) = 255
Nächste
Iptoint = (cint (ipArray (0))*256*256*256) + (cint (ipArray (1))*256*256) + (cint (ipArray (2))*256) + cint (ipArray (3) Heilung
Endfunktion
"====================================================
'Unsere Ganzzahl umgekehrt IP -Adresse
"====================================================
Funktion intoip (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 = int Wert
Instrument = CSTR (P1) & CSTR (P2) & CSTR (P3) & & CSTR (P4)
Endfunktion
"====================================================
'Holen Sie sich den Start -IP -Standort
"====================================================
Private Funktionen 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
Endfunktion
"====================================================
'Holen Sie sich die Endposition
"====================================================
Private Funktion 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
Endfunktion
"====================================================
'Erhalten Sie regionale Informationen, einschließlich des Landes und der Provinz und der Städte
"====================================================
Private Sub GetCountry (IP)
If (CountryFlag = 1 oder CountryFlag = 2) dann
Country = getFlagstr (Endipoff + 4)
Wenn CountryFlag = 1 dann
Localstr = getflagstr (Stream.Position)
'Im Folgenden wird die Datenbankversionsinformationen erhalten
Wenn ip> = iptoint (255.255.255.0) und IP <= iptoint (255.255.255.255) dann dann
Localstr = getflagstr (Endipoff + 21)
Country = getFlagstr (Endipoff + 12)
Ende wenn
Anders
Localstr = getflagstr (Endipoff + 8)
Ende wenn
Anders
Country = getFlagstr (Endipoff + 4)
Localstr = getflagstr (Stream.Position)
Ende wenn
Filtern Sie die nutzlosen Informationen in der Datenbank
Land = Trim (Land)
Localstr = trimm (localstr)
Wenn Instrument (Land, CZ88.net) dann Land =
If Instr (localstr, cz88.net) dann localstr =
Ende sub
"====================================================
'Holen Sie sich die IP -Adresskennung
"====================================================
Private Funktion getFlagstr (Offset)
Dunkle Flagge
Flag = 0
Ganze (wahr) tun
Stream.position = offset
Flag = ASCB (Stream.read (1))
If (Flag = 1 oder Flag = 2) dann
Buf = stream.read (3)
If (Flag = 2) dann
CountryFlag = 2
Endipoff = offset -4
Ende wenn
Offset = ASCB (MIDB (BUF, 1, 1)) + (ASCB (MIDB (BUF, 2, 1))*256) + (ASCB (MIDB (BUF, 3, 1))*256*256)
Anders
Ausgang tun
Ende wenn
Schleife
If (offset <12) dann
Getflagstr =
Anders
Stream.position = offset
Getflagstr = getstr ()
Ende wenn
Endfunktion
"====================================================
'Holen Sie sich die String -Informationen
"====================================================
Private Funktion getstr ()
Dim c
Getstr =
Ganze (wahr) tun
C = ASCB (Stream.read (1))
If (c = 0) dann beenden
'Wenn es sich um einen Zwei -Byte handelt, wird ein hohes Byte in Kombination mit einer niedrigen Byte -Synthese eines Charakters kombiniert
Wenn c> 127 dann
Wenn Stream.eos der Ausgang tun
Getstr = getstr & chr. (ASCW (CHRB (ASCB (stream.read (1))) & chrb (c)
Anders
Getstr = getstr & chr (c)
Ende wenn
Schleife
Endfunktion
"====================================================
'Kernfunktion, IP -Suche ausführen
"====================================================
Öffentliche Funktion QQWRY (DOTIP)
Dim IP, Nret
Dim Rangb, Range, Reichweite, Reichweite
Ip = iptoint (dotip)
Stream = createObject (adodb.stream) setzen
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
'In der Datenbank kann keine IP -Adresse finden
If (recordCount <= 1) dann
Land = unbekannt
Qqwry = 2
Ausgangsfunktion
Ende wenn
Rangb = 0
Bereich = RecordCount
Tun Sie warum (Rangb <(Bereich -1))
Rangb + Range/2)
Rufen Sie GetStartip (Recno) an
If (ip = startIp) dann
Rangb = recino
Ausgang tun
Ende wenn
If (ip> startip) dann
Rangb = recino
Anders
Bereich = Recno
Ende wenn
Schleife
Rufen Sie GetStartip (Rangb) an
Anruf getendip ()
If (startip <= ip) und (endip> = ip) dann dann
'Nein gefunden
nret = 0
Anders
'Normal
nret = 3
Ende wenn
Rufen Sie GetCountry (IP) an
Qqwry = nret
Endfunktion
"====================================================
'Klassenende
"====================================================
Private sub class_terate
Bei der nächsten Fehleraufnahme als nächstes
Stream.close
Wenn er irrt, dann err.clear
Setzen Sie Stream = nichts
Ende sub
Endklasse
%>