< %@LANGUAGE="VBSCRIPT " CODEPAGE="936"%>
<html>
<голова>
<title>Документ без названия</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</голова>
<тело>
<%
тусклый финишgetip,showip,allip
'////////////////////////////////////////////////// /// ////////
«Программа еще не очень оптимизирована и будет изменена позже.
«База данных, используемая в этой программе, — «Фэн Чжихун», написанная — «Пунт», — база данных IP, включенная в программное обеспечение и
«Таблица глобального распределения IP-адресов.chm», написанная автором «Guohua Soft» — «Feng Guohua», — объединена в один файл.
«Спасибо «Фэн Чжихун» и «Фэн Гохуа» за предоставленные данные.
«В базе данных все еще есть много повторяющихся IP-адресов. Я надеюсь, что кто-нибудь сможет удалить их и уменьшить размер базы данных.
«Моя программа все еще очень неуклюжая. Я надеюсь, что каждый сможет высказать мне больше мнений и больше общаться. Спасибо!
'////////////////////////////////////////////////// /// //////////
«Решение: www.downcodes.com
'Полученный IP-адрес клиента обычно равен 202.11.25.1, а формат IP в базе данных – 202.011.025.001, что требует полученного
'Преобразуем IP-адрес клиента в тот же формат, что и IP-адрес в базе данных
«Поскольку IP-адрес, который мы сейчас используем, разделен на 4 сегмента, каждый сегмент состоит из 3 цифр, разделенных знаком «.»
«Поэтому моя идея состоит в том, чтобы разделить IP-адрес клиента на 4 сегмента с помощью символа «.», то есть 202/11/25/1.
'Тогда проверьте каждый абзац отдельно. Если он состоит из 3 цифр, он останется неизменным; если он меньше 3 цифр, это будет 2 цифры. Добавьте 1 0 перед абзацем, и будет 1. Аналогично добавьте 2. 0 с.
'После получения отформатированного IP удалите последний сегмент IP, то есть возьмите первые 11 цифр, включая ".", сравните их с первыми 11 цифрами стартового поля в базе данных и найдите то же значение
«Потому что из базы данных видно, что первые три сегмента startip и endip одинаковы, а последний сегмент — это просто внутренний адрес подсети, и его можно удалить.
«Поэтому просто возьмите первые 11 цифр любого поля startip или endip и сравните их с первыми 11 цифрами IP-адреса клиента, чтобы найти правильное местоположение.
'////////////////////////////////////////////////// /// ///////////////
функция checkip_trueip()
'Получить реальный IP клиента
getclientip = Request.ServerVariables("HTTP_X_FORWARDED_FOR") 'Если клиент использует прокси-сервер, метод Request.ServerVariables("REMOTE_ADDR") может получить только нулевое значение, тогда следует использовать метод ServerVariables("HTTP_X_FORWARDED_FOR")
Если getclientip = "" Тогда
getclientip = Request.ServerVariables("REMOTE_ADDR")'Если клиент не использует прокси, Request.ServerVariables("HTTP_X_FORWARDED_FOR") получит нулевое значение, и следует использовать метод Request.ServerVariables("REMOTE_ADDR").
конец, если
checkip_trueip = getclientip
конечная функция
'////////////////////////////////////////////////// /// ////////
function getaccessrecordset(db,sql,mark,read)'Получить объект набора записей
set conn=getaccessconn(db)'Входные параметры — это относительный путь к базе данных db, оператор sql-SQL, mark, read — методы чтения базы данных, 1,1 — только для чтения, 1,3 — для чтения и записи.
'constr="Provider=microsoft.jet.oledb.4.0;"&"data Source="&Server.MapPath(db)
' conn.open const
set getaccessrecordset=server.CreateObject("ADODB.Recordset")
getaccessrecordset.open sql,conn,mark,read
Конечная функция
'////////////////////////////////////////////////// /// ///////////
function getaccessconn(db)'Получить объект подключения
set getaccessconn=server.CreateObject("ADODB.Connection")
'constr="DRIVER={MICROSOFT ACCESS DRIVER (*.MDB)};DBQ="&SERVER.MAPPATH("allcon/#bbsall.mdb")
constr="Provider=microsoft.jet.oledb.4.0;"&"data Source="&Server.MapPath(db)
getaccessconn.open конструкция
конечная функция
'////////////////////////////////////////////////// /// ///////////
тусклый гетип
'getip=(trim(request.ServerVariables("REMOTE_ADDR")))'Получить IP от клиента
'getip=(trim(request.QueryString("comes"))) 'Введите IP самостоятельно, чтобы проверить
'response.Write(getip&"<br>")
'////////////////////////////////////////////////// /// ///////////
function checkip_locations(checkstring) 'Возвращает функцию определения местоположения символа-разделителя в IP-адресе
checkip_locations=Instr(checkstring,".") 'Присвойте значение местоположения функции
конечная функция
'////////////////////////////////////////////////// /// ///////////
'Следующая функция состоит в том, чтобы разделить IP и получить оставшуюся строку IP справа от символа "." после каждого разделения.
функция checkip_left(контрольная строка)
Locations_left=checkip_locations(checkstring) 'Получите место, где "." впервые появляется в оставшейся строке IP.
iplength_left=Len(checkstring) 'Получаем длину оставшейся строки IP
divle_locations_left=iplength_left-locations_left 'Получить позицию, где "." впервые появляется в оставшейся строке IP, сколько цифр справа налево.
ipstr_left=Right(checkstring,divide_locations_left) 'Получите оставшуюся строку IP-адреса справа от символа "." после этого разделения.
checkip_left=ipstr_left 'Присвойте полученную выше строку функции
конечная функция
'////////////////////////////////////////////////// /// //////////
'Следующая функция состоит в том, чтобы разделить IP-адрес и получить строку IP слева от символа "." после каждого разделения, то есть IP-адрес делится на четыре сегмента, а строковая функция каждого сегмента
- checkip_right(checkstring)
Locations_right=checkip_locations(checkstring) 'Получите место, где "." впервые появляется в IP-адресе.
iplength_right=Len(checkstring) 'Получаем длину IP-строки
divle_locations_right=iplength_right-locations_right 'Получите позицию, где "." впервые появляется в оставшейся строке IP, сколько там цифр справа налево
ipstr11=Trim(Replace(Left(checkstring,locations_right),".","")) 'Удаляем символ "." из строки слева от полученного "."
'Если IP разделен на 4 сегмента и каждый сегмент содержит менее 3 цифр, добавьте 0
если Len(ipstr11)="2", то ipstr11="0"&ipstr11
если Len(ipstr11)="3", то ipstr11=ipstr11
если Len(ipstr11)="1", то ipstr11="00"&ipstr11
checkip_right=ipstr11 'Получаем строку перед символом ".", то есть один из четырех сегментов после IP-адреса делится на четыре сегмента.
конечная функция
'/////////////////////////////////////////////// /// //////////
'Проверяем, является ли IP-адрес внутренней сетью
«Написанное мною решение основано на: 127.0.0.0-127.XXX.XXX.255 и 192.0.0.0-192.XXX.XXX.255. Если это эти два, то это IP-адрес внутренней сети, в противном случае это IP-адрес внутренней сети. внешняя сеть.
«Я не знаю, на каком основании оценивается внутренняя интеллектуальная собственность, поэтому мне нужны эксперты, которые дадут мне несколько советов и внесут исправления. Свяжитесь со мной.
функция checkilocal (контрольная строка)
тусклый re1
set re1=new RegExp 'Получить объект регулярного выражения
Выражение в 're1.pattern заключается в том, что IP внутренней сети должен начинаться с 127 или 192, а в середине должны быть любые 1-3 цифры от 0 до 9 плюс "."
re1.pattern="^(127.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})|(192. [0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})$"
re1.global = ложь
re1.Ignorecase=false
checkiplocal=re1.test(проверочная строка)
установить re1=ничего
конечная функция
'////////////////////////////////////////////////// /// ///////////////////////
функция checkip_remote (проверочная строка)
dim iplength 'Длина IP-строки
тусклые локации '"."Место, где появляется персонаж
iplength=Len(проверка)
Locations=Instr(checkstring,".") 'Получает позицию, где символ "." впервые появляется в строке IP слева направо.
'Разделить IP-адрес на 4 сегмента с помощью символов "."
location2=длина IP-адреса
ipstring1=Влево(контрольная строка,местоположение)
ipstring2=Вправо(контрольная строка,locations2)
конечная функция
'////////////////////////////////////////////////// /// ////////
'////////////////////////////////////////////////// /// ////////
ipinfo_local="Ваш IP-адрес интрасети!"
ipinfo_remote="IP внешней сети!"
getip=checkip_trueip()
currentip=checkilocal(getip) 'Вызовите функцию checkiplocal(), чтобы проверить полученный IP-адрес и определить, является ли он адресом внутренней сети или адресом внешней сети.
'if currentip=true then' тестовый код
'response.Write(ipinfo_local)
если currentip=true, то «ложь»
response.Write(ipinfo_local)' указывает IP-адрес внутренней сети.
еще
'Конвертировать
'Ниже следует извлечение цикла и заполнение битами 0, чтобы разделить IP на 4 сегмента.
Locations=checkip_locations(getip)'Получите местоположение, где "." впервые появляется в IP-адресе перед первым разделением.
iplength=Len(getip) 'Получаем длину IP-адреса клиента
divle_locations=iplength-locations 'Получить местоположение IP-адреса клиента, считая справа налево до первого "." IP-адреса, считая слева направо.
ipstr1=Trim(Replace(Left(getip,locations),".",""))
ipstr2=Right(getip,divide_locations)'Получите оставшееся значение на правой стороне клиента после первого разделения
'Если IP разделен на 4 сегмента и каждый сегмент содержит менее 3 цифр, добавьте 0
if Len(ipstr1)="2" then ipstr1="0"&ipstr1 'Длина равна двум, меньше трех, добавьте 0 перед строкой
if Len(ipstr1)="3" then ipstr1=ipstr1 'По приведенной выше аналогии
if Len(ipstr1)="1" then ipstr1="00"&ipstr1 'IPstr1 в данный момент является первым сегментом IP
ipstr12=checkip_right(ipstr2) 'IPstr12 в данный момент является вторым сегментом IP
ipstr122=checkip_left(ipstr2)
ipstr13=checkip_right(ipstr122) 'IPstr13 в настоящее время является третьим сегментом IP-адреса.
ipstr14=checkip_left(ipstr122) 'IPstr14 в настоящее время является четвертым сегментом IP
if Len(ipstr14)="1" then ipstr14="00"&ipstr14 'Добавить 0 к четвертому сегменту полученного IP. Этот шаг не обязателен.
если Len(ipstr14)="2", то ipstr14="0"&ipstr14
если Len(ipstr14)="3", то ipstr14=ipstr14
'response.write ipstr1&"<br>" 'Запишите значение каждого сегмента после сегментации IP
'response.write ipstr12&"<br>"
'response.write ipstr13&"<br>"
'response.write ipstr14
allip=ipstr1&"."&ipstr12&"."&ipstr13&"."&ipstr14
Finishgetip = влево (алип, 11)
тусклый ipaddr, ilocal, sqls
'Следующий оператор SQL предназначен для определения того, равно ли левое 11-битное значение поля startip левому 11-битному значению IP-адреса клиента.
sqls="SELECT Country_state,areauser FROM ip WHERE Left(startip,11)='"&finishgetip&"'"
set rs=getaccessrecordset("#worldip.mdb",sqls,"1","1") 'Получаем значение запроса
if rs.eof then 'Если не найдено значение, равное IP-адресу клиента
showip=checkip_trueip() 'Назначаем IP-адрес клиента showip
ipaddr="Неизвестный регион" 'Страна или провинция
iplocal="Неизвестное местоположение" 'Конкретное место
еще
showip=checkip_trueip()
ipaddr=rs("country_state")
iplocal=rs("областьпользователя")
конец, если
'response.write("Ваш IP: "&showip&" ")
'response.write("Вы откуда: "&ipaddr&" ")
'response.write("Вы:"&iplocal)
RS.закрыть
установить rs=ничего
%>
<%="Ваш IP:"&showip&" "%>
<%="Вы откуда:"&ipaddr&" "%>
<%="Вы:"&ilocal&"<br>"%>
Если в IP-адресе ошибка, свяжитесь со мной или скачайте базу для исправления, спасибо! <br>
<table width="760" border="0" cellpacing="0" cellpadding="0">
<тр>
<td width="203"><a href="Script56.rar">Загрузить Script56.CHM</a>-->1,34M</td>
<td width="548">Введение: справочная документация Microsoft, включая синтаксис VBscript, синтаксис JScript, регулярные выражения </td>
<td width="3"> </td>
<td width="6"> </td>
</tr>
<тр>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<тр>
<td><a href="ipsearch.rar">Загрузить программу глобального поиска IP-адресов ASP</a></td>
<td>ASP+ACCESS размер 401 КБ; формат rar</td>
<td> </td>
<td> </td>
</tr>
<тр>
<td> </td>
<td><font color="#000099"> </font> <font color="#0000FF"> </font></td>
<td> </td>
<td> </td>
</tr>
<тр>
<td>Если ваш IP-адрес неизвестен, при желании укажите свое местоположение:</td>
<тд>
<form name="form1" Method="post" action="postip.asp">
<table width="100%" border="1" cellpacing="0" cellpadding="0">
<тр>
<td width="21%"> Провинция: </td>
<td width="44%">
<input type="text" name="country_state">
</td>
<td width="35%"> </td>
</tr>
<тр>
<td width="21%">Конкретное местоположение или пользователь сети:</td>
<td width="44%">
<input type="text" name="areauser">
</td>
<td width="35%">Например: пользователи Пекинского университета Цинхуа или пользователи Beijing Netcom</td>
</tr>
<тр>
<td width="21%"> </td>
<td width="44%">
<input type="hidden" name="startip" value="<%=finishgetip&.000"%>">
<input type="hidden" name="endip" value="<%=finishgetip&.255"%>">
</td>
<td width="35%"> </td>
</tr>
<тр>
<td width="21%"> </td>
<td width="44%">
<input type="submit" name="Submit" value="Submit">
</td>
<td width="35%"> </td>
</tr>
</таблица>
</форма>
</td>
<td> </td>
<td> </td>
</tr>
</таблица>
<%
конец, если
%>
</тело>
</html>
Демонстрационный адрес: http://www.knowsky.com/ip