<%
'=================================================================
'Возврат IP Information issors_ipaddressdata (IP, 0)
'=================================================================
Function look_ip (ip)
Тусклый ...
'Установка объекта класса
SET Station = новый TQQWRY
'Начните поиск и верните результаты поиска
'Вы можете определить, существует ли IP -адрес в базе данных на основе возвратного значения QQWRY (IP), и некоторые другие операции могут быть выполнены, если нет существования
'Например, вы создали базу данных в качестве охоты, я не буду подробно объяснять здесь
Iptype = wry.qqwry (ip)
Страна: национальные и региональные поля
'Localstr: провинциальные и муниципальные и другие информационные поля
Look_ip = wry.country & & wry.localStr
'' 'Look_ip = wry.country &
Конечная функция
'=================================================================
'Вернуться к IP Information Call Call
'=================================================================
Функция iss_ipaddressdata (ip, style)
DIMOVER, ILTYPE
SET Station = новый TQQWRY
Iptype = wry.qqwry (ip)
Выберите стиль корпуса
Case 1 iss_ipaddressdata = ip
Случай 2 disp_ipaddressdata = station.country
Дело 3 Disp_ipaddressdata = wry.localStrtr
'Case else diss_ipaddressdata = wry.country & & wry.localstr
Case else disp_ipaddressdata = wry.country
Конец выбора
Конечная функция
'=================================================================
'Вернитесь в qqwry information
'=================================================================
Функция wryinfo ()
Dimover, iptype, qqwry_tem (0), qqwry_tem1 (1)
'Установка объекта класса
SET Station = новый 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)
Конечная функция
Класс TQQWRY
'=================================================================
'Переменная репутация
'=================================================================
Dim Country, Locallstr, Buf, Offset
Частная стартап, Endip, Countryflag
Публичный QQWryfile
Public FirstStartip, LastStartip, RecordCount
Частный поток, Endipoff
'=================================================================
'Инициализация модуля класса
'=================================================================
Private sub class_initialize
Страна =
LocalStr =
Startip = 0
Endip = 0
CountryFlag = 0
FirstStartip = 0
Laststartip = 0
Endipoff = 0
Qqwryfile = server.mappath (/data/qqwry.dat) 'QQ Innocent IP -инвентарь, чтобы изменить свой путь
Конец суб
'=================================================================
'IP -адрес конвертируется в целое число
'=================================================================
Функция iptoint (IP)
Dim iparray, я
Iparray = split (ip ,., -1)
Для i = 0 до 3
Если нет isNumeric (iparray (i)), то iparray (i) = 0
Если cint (iparray (i)) <0, что iparray (i) = abs (cint (iparray (i))))
Если cint (iparray (i))> 255, что iparray (i) = 255
Следующий
Iptoint = (cint (iparray (0))*256*256*256) + (cint (iparray (1))*256*256) + (cint (iparray (2))*256) + cint (iparray (3) Излечивать
Конечная функция
'=================================================================
'Наш целый ряд изменяющий IP -адрес
'=================================================================
Функция 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 = int value
Intip = cstr (p1) и.
Конечная функция
'=================================================================
'Получите начальное местоположение IP
'=================================================================
Частные функции getStartip (Recno)
Offset = FirstStartip + Recno * 7
Stream.position = смещение
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
Конечная функция
'=================================================================
'Получите конечную позицию IP
'=================================================================
Частная функция 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
Конечная функция
'=================================================================
«Получить региональную информацию, включая страну и провинциальные и города
'=================================================================
Private Subcountry (IP)
If (countryflag = 1 или countryflag = 2) тогда
Страна = getflagstr (endipoff + 4)
Если CountryFlag = 1, то
Localstr = getflagstr (stream.position)
'Следующее используется для получения информации о версии базы данных
Если ip> = iptoint (255.255.255.0) и ip <= iptoint (255.255.255.255) тогда
Localstr = getflagstr (endipoff + 21)
Страна = getflagstr (endipoff + 12)
Конец, если
Еще
Localstr = getflagstr (endipoff + 8)
Конец, если
Еще
Страна = getflagstr (endipoff + 4)
Localstr = getflagstr (stream.position)
Конец, если
«Отфильтруйте бесполезную информацию в базе данных
Страна = Трим (страна)
LocalStr = Trim (LocalStr)
Если instr (страна, cz88.net), то страна =
Если instr (localstr, cz88.net), то localstr =
Конец суб
'=================================================================
'Получить идентификатор IP -адреса
'=================================================================
Частная функция getflagstr (смещение)
Смутный флаг
Флаг = 0
Сделай целый (правда)
Stream.position = смещение
Flag = ascb (stream.read (1))
If (flag = 1 или flag = 2) тогда
Buf = stream.read (3)
If (flag = 2) тогда
CountryFlag = 2
Endipoff = смещение -4
Конец, если
Offset = ASCB (MIDB (BUF, 1, 1)) + (ASCB (MIDB (BUF, 2, 1))*256) + (ASCB (MIDB (BUF, 3, 1))*256*256)
Еще
Выход DO
Конец, если
Петля
Если (смещение <12), тогда
Getflagstr =
Еще
Stream.position = смещение
Getflagstr = getstr ()
Конец, если
Конечная функция
'=================================================================
'Получите информацию о строке
'=================================================================
Частная функция getStr ()
Смуть
Getstr =
Сделай целый (правда)
c = ASCB (stream.read (1))
If (c = 0), затем выйдите
«Если это два -лайт, высокий байт объединяется в сочетании с низким байтовым синтезом персонажа
Если C> 127, то тогда
Если stream.eos выход
Getstr = getstr & chr (ascw (chrb (ascb (stream.read (1))) и Chrb (c)
Еще
Getstr = getstr & chr (c)
Конец, если
Петля
Конечная функция
'=================================================================
'Основная функция, выполнить поиск IP
'=================================================================
Публичная функция qqwry (dotip)
Dim ip, nret
Dim rangb, диапазон, диапазон, диапазон
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
'Не могу найти IP -адрес в базе данных
If (recordcount <= 1), тогда
Страна = неизвестно
Qqwry = 2
Выходная функция
Конец, если
Rangb = 0
RANGE = RecordCount
Делать почему (rangb <(диапазон -1))
Rangb + range/2)
Call GetStartip (Recno)
If (ip = startip) тогда
Rangb = рециноми
Выход DO
Конец, если
If (ip> Startip) тогда
Rangb = рециноми
Еще
Диапазон = Recno
Конец, если
Петля
Позвонить GetStartip (rangb)
Позвонить getendip ()
If (startip <= ip) и (endip> = ip) тогда
'Нет найдено
nret = 0
Еще
' нормальный
nret = 3
Конец, если
Позвоните GetCountry (IP)
Qqwry = nret
Конечная функция
'=================================================================
'Конец класса
'=================================================================
Приватный sub class_terminate
При ошибке резюме следующим
Stream.Close
Если err, то err.clear
Установить поток = ничего
Конец суб
Конечный класс
%>