Мой Kbyte.Ru
Рассылка Kbyte.Ru
Группы на Kbyte.Ru
Партнеры Kbyte.Ru
Реклама
Сделано руками
Сделано руками
> Статьи - Алексей Немиро -

ASP - Сеть и Интернет

Все статьи / Сеть и Интернет

Как узнать страну по IP-адресу?

Автор: Алексей Немиро | добавлено: 03.03.2010, 16:48 | просмотров: 11850 (0+) | комментариев: 0 | рейтинг: *x1

 

Это перевод статьи с английского языка, написанной Amit Gupta.

Введение

 

Интернет широко распространен в большинстве стран и континентов. Узнать страну посетителей вашего веб-сайта может быть не легкой задачей, особенно если вы не знаете как это сделать.

 

Что требуется??

Ну, во-первых, возникает вопрос, зачем вам знать в какой стране живут посетители вашего сайта. Причин может быть много. Некоторые из них:

 

  • Что бы показывать рекламу, ориентированную на страну посетителя сайта
  • Вести учет посещения сайта в зависимости от страны.
  • Показывать локализованную версию сайта.
  • Переводить посетителей сайта на локализованный сайт.
  • Показывать продукты и цены в валюте той страны, в которой проживает посетитель сайта.

 

Это только несколько причин. Их может быть гораздо больше. Но думаю, теперь вы точно знаете, зачем вам нужно знать, в какой стране проживают посетители вашего сайта.

 

Как??

Теперь вы знаете, зачем вам необходимо знать, в какой стране живут посетители вашего сайта, теперь вопрос, как это сделать? Как вы можете узнать страну, в которой приживают посетители вашего сайта?

 

IP и Страна??

Каждый пользователь Интернет имеет уникальный IP-адрес, другими словами, каждый компьютер подключенный к Интернет, имеет уникальный IP-адрес. IP-адрес – это цифровой адрес, ссылающийся на компьютер в сети. Ниже приведен пример обычного IP-адреса: 120.36.162.75


Для каждого ISP (Поставщик Услуг Интернет) распределен определенный диапазон IP-адресов, который провайдер может дать своим пользователям. Таким образом, через IP-адрес, мы можем узнать страну, в которой проживает посетитель нашего сайта.

 

База данных

 

Существует множество бесплатных и коммерческих сервисов предоставляющих данные о географическом положении посетителей вашего сайта. Тем не менее,  мы будем использовать бесплатную базу данных IP-стран с сервера http://ip-to-country.webhosting.info/. Эта база данных доступна в CSV формате и может быть импортирована в любую базу данных, например: MS-Access, MS-SQL, MySQL и т.д. Но мы будем использовать ASP и MS-Access.

 

База данных MS-Access, содержащая загруженные данные из базы данных cvs находится в прикрепленном файле к этой статье. Полный код получения данных находится в конце статьи.

 

И так, после импорта данных из CSV-файла в базу данных MS-Access, мы назовем базу данных ip2country, а таблицу ip2c.

 

Наша таблица ip2c имеет 5 колонок, а именно: ip_from, ip_to, co_code2, co_code3 и co_name.

 

В место IP-адреса в формате xxx.xxx.xxx.xxx эта база данных содержит области IP адреса. Колонка ip_from – начало диапазона, а ip_to - конец. Колонка co_code2 содержит двухзначный код страны, а колонка co_code3 – трехзначный код страны. Колонка co_name содержит полное название страны.

 

Теперь приступим к написанию кода.

 

Кодинг

 

Теперь, когда у нас есть база данных, мы можем приступить к написанию кода.

 

Во-первых, мы должны получить IP-адрес нашего посетителя. Сделать это можно следующим образом:

 

<%

  strIP = Request.ServerVariables("REMOTE_ADDR")

%>

 

ServerVariables содержит HTTP заголовки, отправленные браузером пользователя. Переменная "REMOTE_ADDR" содержит IP-адрес посетителя сайта. Так, мы можем получить IP-адрес в формате xxx.xxx.xxx.xxx, например такой: 108.89.128.147.

 

Но, поскольку в нашей базе данных нет IP-адресов, а есть только область IP, мы должны конвертировать IP-адрес в область IP. Для этого, можно использовать следующую формулу:

 

A * (256*256*256) + B * (256*256) + C * 256 + D

 

, где A, B, C и D представляют собой IP-адрес: A.B.C.D.

 

И так, для удобства, мы можем сделать функцию, которая будет преобразовывать IP-адрес в область IP:

 

<%

  Private Function ipAd2ipNum(ipA)

    strO = ipA

    pos1 = InStr(strO, ".")

    intA = CInt(Left(strO, (pos1-1)))

    strO2 = Mid(strO, pos1+1, len(strO))

    pos2 = InStr(strO2, ".")

    intB = CInt(Left(strO2, (pos2-1)))

    strO3 = Mid(strO2, pos2+1, len(strO2))

    pos3 = InStr(strO3, ".")

    intC = CInt(Left(strO3, (pos3-1)))

    intD = CInt(Mid(strO3, pos3+1, len(strO3)))

    intConvert = (intA*(256*256*256)) + (intB*(256*256)) + (intC*256) + intD

    ipAd2ipNum = Trim(intConvert)

  End Function

%>

 

Использовать эту функцию можно так:

 

<%

  strIP = Request.ServerVariables("REMOTE_ADDR")

  strIPN = ipAd2ipNum(strIP)

%>

 

Таким образом мы получаем область IP из нашего IP-адреса, теперь мы готовы получить страну из нашей базы данных.

 

Выполнение запроса

 

Теперь, когда мы знаем область IP нашего посетителя сайта, мы напишем запрос на поиск названия страны посетителя в базе данных.

 

Для начала, необходимо подключиться к нашей базе данных:

 

<%

  strConString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="

  strConString = strConString & Server.MapPath("ip2country.mdb")

 

  Set objCon = Server.CreateObject("ADODB.Connection")

  objCon.Open strConString

%>

 

Теперь, когда соединение установлено, мы можем приступить к написанию запроса:

 

<%

  strSQL = "select co_name from ip2c where ip_from<=" & strIPN

  strSQL = strSQL & "and ip_to>=" & strIPN

 

  Set objRs = Server.CreateObject("ADODB.Recordset")

  objRs.Open strSQL,objCon

%>

 

После чего, выводим результаты выполнения запроса:

 

<%

  If NOT(objRs.EOF) OR NOT(objRs.BOF) Then

    strCountry = objRs.Fields("co_name")

%>

Ваш IP-адрес:- <%=strIP%><br>

Ваша страна:- <%=strCountry%>

<%

  Else

%>

Ваш IP-адрес:- <%=strIP%><br>

Ваша страна:- <b>unlisted</b>

<%

  End If

 

  objRs.Close

  objCon.Close

  Set objRs = nothing

  Set objCon = nothing

  Set strSQL = nothing

%>

 

И так, мы выводим IP-адрес и название страны нашего посетителя сайта. Если страна не найдена в базе данных, то мы выводим сообщение: «unlisted».

 

Полный листинг находится ниже.

 

Полный листинг

 

<% @language="VBScript" %>

<%

  Private Function ipAd2ipNum(ipA)

    strO = ipA

    pos1 = InStr(strO, ".")

    intA = CInt(Left(strO, (pos1-1)))

    strO2 = Mid(strO, pos1+1, len(strO))

    pos2 = InStr(strO2, ".")

    intB = CInt(Left(strO2, (pos2-1)))

    strO3 = Mid(strO2, pos2+1, len(strO2))

    pos3 = InStr(strO3, ".")

    intC = CInt(Left(strO3, (pos3-1)))

    intD = CInt(Mid(strO3, pos3+1, len(strO3)))

    intConvert = (intA*(256*256*256)) + (intB*(256*256)) + (intC*256) + intD

    ipAd2ipNum = Trim(intConvert)

  End Function

 

  strConString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="

  strConString = strConString & Server.MapPath("ip2country.mdb")

 

  Set objCon = Server.CreateObject("ADODB.Connection")

  objCon.Open strConString

  If NOT(objRs.EOF) OR NOT(objRs.BOF) Then

    strCountry = objRs.Fields("co_name")

%>

Ваш IP-адрес:- <%=strIP%><br>

Ваша страна:- <%=strCountry%>

<%

  Else

%>

Ваш IP-адрес:- <%=strIP%><br>

Ваша страна:- <b>unlisted</b>

<%

  End If

 

  objRs.Close

  objCon.Close

  Set objRs = nothing

  Set objCon = nothing

  Set strSQL = nothing

%>

 

Заключение

 

И так, в этой статье приведен простой пример, как узнать страну посетителя нашего сайта по его IP-адресу, средствами ASP.

 

Использовать этот метод можно где угодно и для чего угодно.

 

Как я уже говорил, существует множество бесплатных серверов, которые предоставляют базы данных с данными соответствия стран IP-адресу, но также, есть и платные базы данных, которые содержат штат, город, ISP и многую другую информацию. Например, на сервере http://www.ip-to-location.com/ также можно найти за определенную плату базу данных с более подробной информацией об областях IP.

 

Но помимо этого, существует множество сайтов, которые предоставляют бесплатный интерфейс, для получения подробной информации об IP-адресе.

 

Скачать базу данных можно здесь (612 Кб)

+ Добавить в избранное
    ? Помощь
Об авторе

Алексей Немиро

Интернет-деятель. Автор многочисленных статей и переводов статей по программированию и информационным технологиям. Работы Алексея можно найти в популярных печатных изданиях компьютерной тематики. Автор проекта Kbyte.Ru.
Сейчас Алексей занимается профессиональным Web-программированием на базе технологий .NET Framework. Иногда пишет различные программки и компоненты для Windows и Android. В свободное время занимается Web-дизайном, увлекается фото- и видеосъемкой.

См. также:
Профиль автора
Алексей Немиро
Последние комментарии (всего: 0)

Добавлять комментарии могут только зарегистрированные пользователи сайта.
Если у Вас уже есть учетная запись на Kbyte.Ru, пройдите процедуру авторизации OpenID.
Если Вы еще не зарегистрированы на Kbyte.Ru - зарегистрируйтесь.


Нет комментариев...

Авторизация
 
OpenID
Зарегистрируйся и получи 10% скидку на добавление своего сайта в каталоги! Подробнее »
Поиск по сайту
Люди на Kbyte.Ru
Реклама
Счетчики