<%
'========================================
'Mengembalikan informasi IP disp_ipaddressdata (ip, 0)
'========================================
Function look_ip (ip)
Redup ...
'Mengatur objek kelas
Set stasiun = tqqwry baru
'Mulai cari dan kembalikan hasil pencarian
'Anda dapat menentukan apakah alamat IP ada dalam database berdasarkan nilai pengembalian QQWRY (IP), dan beberapa operasi lain dapat dilakukan jika tidak ada keberadaan
'Misalnya, Anda membangun database sebagai perburuan, saya tidak akan menjelaskan secara rinci di sini
IPTYPE = WRY.QQWRY (IP)
'Negara: Bidang Nasional dan Wilayah
'LocalStr: bidang provinsi dan kota dan informasi lainnya
Look_ip = Wry.Country & & Wry.LocalStr
'' 'Look_ip = Wry.Country &
Fungsi akhir
'========================================
'Kembali ke Informasi IP JS Call
'========================================
Fungsi disp_ipaddressdata (IP, gaya)
Dimover, Iltype
Set stasiun = tqqwry baru
IPTYPE = WRY.QQWRY (IP)
Pilih gaya case
Case 1 disp_ipaddressdata = ip
Case 2 disp_ipaddressdata = station.country
Kasus 3 disp_ipaddressdata = gre.localstrtr
'Case lain disp_ipaddressdata = grey.country & & wry.localstrtr
Kasus lain disp_ipaddressdata = gre.country
Akhiri Pilih
Fungsi akhir
'========================================
'Kembali ke Informasi QQWRY
'========================================
Function wryinfo ()
Dimover, ptype, qqwry_tem (0), qqwry_tem1 (1)
'Mengatur objek kelas
Set stasiun = tqqwry baru
IPTYPE = WRY.QQWRY (255.255.255.254)
'Baca informasi versi database
Qqwry_tem (0) = Wry.Country & & Wry.LocalStr
'Baca jumlah alamat IP basis data
QQWRY_TEM1 (1) = WRY.RecordCount + 1
WryInfo = qqwry_tem (0) & qqwry_tem1 (1)
Fungsi akhir
Kelas TQQWRY
'========================================
'Reputasi variabel
'========================================
Negara redup, localstr, buf, offset
Startip pribadi, endip, countryflag
Qqwryfile publik
Public FirstStip, LastStartip, RecordCount
Aliran pribadi, Endipoff
'========================================
'Inisialisasi modul kelas
'========================================
Private Sub Class_initialize
Negara =
Setempat =
Startip = 0
Endip = 0
Countryflag = 0
FirstStartip = 0
LastStartip = 0
Endipoff = 0
Qqwryfile = server.mappath (/data/qqwry.dat) 'qq jalur inventaris ip tidak bersalah, untuk berubah ke jalur Anda
Akhir sub
'========================================
'Alamat IP dikonversi ke integer
'========================================
Fungsi iptoint (ip)
Redup iparray, i
Iparray = split (ip ,., -1)
Untuk i = 0 hingga 3
Jika tidak isnumeric (iparray (i)) maka iparray (i) = 0
If cint (iparray (i)) <0 thatn iparray (i) = abs (cint (iparray (i))))
If cint (iparray (i))> 255 Iparray (i) = 255 itu = 255
Berikutnya
Ptoint = (cint (iparray (0))*256*256*256) + (cint (iparray (1))*256*256) + (cint (iparray (2))*256) + cint (iparray (3) Menyembuhkan
Fungsi akhir
'========================================
'Integer kami membalikkan alamat IP
'========================================
Fungsi inttoip (intvalue)
p4 = nilai int -fix (intvalue/256)*256
Intvalue = (intvalue-p4)/256
p3 = nilai int -fix (intvalue/256)*256
Intvalue = (intvalue-p3)/256
p2 = nilai int -fix (intvalue/256)*256
Intvalue = (intvalue -p2)/256
P1 = Nilai int
Intip = CSTR (P1) &.
Fungsi akhir
'========================================
'Dapatkan Lokasi IP Mulai
'========================================
Fungsi Pribadi GetStartip (Recno)
Offset = FirstStip + 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
Fungsi akhir
'========================================
'Dapatkan posisi IP akhir
'========================================
Fungsi pribadi 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
Fungsi akhir
'========================================
'Dapatkan informasi regional, termasuk negara dan provinsi dan kota
'========================================
Sub Private GetCountry (IP)
If (countryflag = 1 atau countryflag = 2) kemudian
Country = getFlagstr (endipoff + 4)
Jika countryflag = 1 maka
Localstr = getFlagstr (stream.position)
'Berikut ini digunakan untuk mendapatkan informasi versi basis data
Jika ip> = ptoint (255.255.255.0) dan IP <= ptoint (255.255.255.255) Kemudian
Localstr = getFlagstr (endipoff + 21)
Country = getFlagstr (endipoff + 12)
Akhiri jika
Kalau tidak
Localstr = getFlagstr (endipoff + 8)
Akhiri jika
Kalau tidak
Country = getFlagstr (endipoff + 4)
Localstr = getFlagstr (stream.position)
Akhiri jika
'Saring informasi yang tidak berguna dalam database
Negara = trim (negara)
LocalStr = trim (LocalStr)
If instr (country, cz88.net) maka country =
If instr (localstr, cz88.net) lalu localstr =
Akhir sub
'========================================
'Dapatkan pengidentifikasi alamat IP
'========================================
Fungsi pribadi getFlagstr (offset)
Bendera redup
Bendera = 0
Lakukan keseluruhan (benar)
Stream.position = offset
Bendera = ASCB (stream.read (1))
If (flag = 1 atau flag = 2) lalu
Buf = stream.read (3)
If (flag = 2) lalu
Countryflag = 2
Endipoff = offset -4
Akhiri jika
Offset = ASCB (midb (buf, 1, 1)) + (ASCB (midb (buf, 2, 1))*256) + (ASCB (midb (buf, 3, 1))*256*256)
Kalau tidak
Keluar
Akhiri jika
Lingkaran
If (offset <12) lalu
GetFlagstr =
Kalau tidak
Stream.position = offset
GetFlAgstr = getTtr ()
Akhiri jika
Fungsi akhir
'========================================
'Dapatkan informasi string
'========================================
Fungsi pribadi getStr ()
Redup c
Gettr =
Lakukan keseluruhan (benar)
C = ASCB (stream.read (1))
If (c = 0) kemudian keluar
'Jika itu adalah dua -byte, byte tinggi dikombinasikan dalam kombinasi dengan sintesis byte rendah dari suatu karakter
Jika c> 127 maka
Jika stream.eos keluar
Getstr = getStr & chr (ascw (chrb (ascb (stream.read (1))) & chrb (c)
Kalau tidak
Gettr = gettr & chr (c)
Akhiri jika
Lingkaran
Fungsi akhir
'========================================
'Fungsi inti, jalankan pencarian IP
'========================================
Fungsi publik qqwry (doTip)
Redup ip, nret
Red rangb, rentang, jangkauan, jangkauan
Ip = ptoint (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
'Tidak dapat menemukan alamat IP di database
If (recordcount <= 1) lalu
Negara = tidak diketahui
QQWRY = 2
Fungsi keluar
Akhiri jika
Rangb = 0
Range = RecordCount
Lakukan mengapa (rangb <(rentang -1))
Rangb + range/2)
Hubungi GetStartip (Recno)
If (ip = startip) lalu
Rangb = recino
Keluar
Akhiri jika
If (ip> startip) lalu
Rangb = recino
Kalau tidak
Rentang = recno
Akhiri jika
Lingkaran
Hubungi GetStartip (Rangb)
Hubungi getENDIP ()
If (startip <= ip) dan (endip> = ip) lalu
'Tidak ditemukan
nret = 0
Kalau tidak
'Normal
nret = 3
Akhiri jika
Hubungi GetCountry (IP)
Qqwry = nret
Fungsi akhir
'========================================
'Kelas Akhir
'========================================
Sub Class_Terminate pribadi
Pada kesalahan resume berikutnya
Stream.close
Jika err maka err.clear
Atur stream = tidak ada
Akhir sub
Kelas akhir
%>