The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Модуль определения географического положения по IP - mod_GeoIP (geo mod_geoip apache)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: geo, mod_geoip, apache,  (найти похожие документы)
From: Алексей Кеда (lissyara) <admin@lissyara.su.> Date: Mon, 28 Mar 2008 18:21:07 +0000 (UTC) Subject: Модуль определения географического положения по IP - mod_GeoIP Оригинал: http://www.lissyara.su/?id=1133 Неплохой модуль для apache1.3 - по IP посетителя определяется его страна, регион и город. /usr/home/lissyara/> /usr/home/lissyara/>cd /usr/ports/ /usr/ports/>make search name='mod_geoip' Port: mod_geoip-1.2.7 Path: /usr/ports/www/mod_geoip ... Port: mod_geoip2-1.1.7 Path: /usr/ports/www/mod_geoip2 /usr/ports/>cd /usr/ports/www/mod_geoip /usr/ports/www/mod_geoip/>make && make install && make clean /usr/ports/www/mod_geoip/>pkg_info | grep "[Gg]eo" GeoIP-1.3.14 Find the country that any IP address or hostname originates mod_geoip-1.2.7 An Apache module that provides the country code of the clie Он за собой тащит собственно GeoIP - из него ему нужна БД. После установки редактируем конфиг апача - раскомментруем модуль mod_geoip: /usr/local/etc/apache/httpd.conf LoadModule geoip_module libexec/apache/mod_geoip.so AddModule mod_geoip.c И добавляем такие строки: <IfModule mod_geoip.c> ##### модуль GeoIP начался # # Включаем модуль GeoIPEnable On # Указываем путь к БД (в доках говориться, что # надо тока если местоположение БД нестандартное, но # какое считается стандартным - нигде не нашёл - потому # на всякий случай указываю) - БД инсталлится вместе с # портом GeoIP. GeoIPDBFile /usr/local/share/GeoIP/GeoIP.dat # Следующая директива устанавливает где применяется модуль # GeoIP (по крайней мере я так понял) - тока в примечаниях apache (Notes), # только в переменных окружения (Env) или везде (All - по дефолту): GeoIPOutput All # заставляет проверять БД GeoIP.dat чтобы определить, обновлялась ли БД # нужно чтобы не перезапускать апач при обновлении БД GeoIPFlags CheckCache ###### пример блокировки отдельных стран # Блокируем косоглазеньких - всё равно ничё не поймут SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry # Блокируем америкосов - тоже ничё не поймут, тупые слишком. SetEnvIf GEOIP_COUNTRY_CODE US BlockCountry # Что мы, собствено, делаем по вышеуказанным правилам, # это должно быть в директории которую блокируем, т.е. внутри # <Directory "/usr/local/www/data"> # ............... #Deny from env=BlockCountry # </Directory> </IfModule> После чего перезапускаем апач, и пробуем, что у нас получилось, таким скриптиком, на php: <pre>Откуда пришел: <?php $country_code = apache_note("GEOIP_COUNTRY_CODE"); $region = apache_note("GEOIP_REGION"); $country_name = apache_note("GEOIP_COUNTRY_NAME"); $city = apache_note("GEOIP_CITY"); echo "Код страны: " . $country_code . "\n"; echo "Регион: " . $region . "\n"; echo "Имя страны: " . $country_name . "\n"; echo "Город: " . $city . "\n"; ?> </pre> Вот его вывод, для московского IP: Откуда пришел: Код страны: RU Регион: Имя страны: Russian Federation Город: Если заходить с частного IP (192.168.x.x) то не покажет ничего :) Почему не показал регион и город - я так думаю что нас считают страной дикой, где кроме медведей, ядерных ракет, и людей в телогрейках и шапках-ушанках ничего и нету... Кстати, в примерах, на сайте автора модуля, был пример, как заблокировать доступ с региона RU. Я же в ответ привёл примёр как залочить буржуев :) P.S. Добавлено по итогам первого комментария. Где взять базы - тут лежит какая-то программа, не вникал. К ней идуд базы. Надо поставить `expert`-версию, после чего установятся базы. Базы копируем куда надо, правим чутка конфиг: <IfModule mod_geoip.c> ##### модуль GeoIP начался # # Включаем модуль GeoIPEnable On # Указываем путь к БД (в доках говориться, что # надо тока если местоположение БД нестандартное, но # какое считается стандартным - нигде не нашёл - потому # на всякий случай указываю) - БД инсталлится вместе с # портом GeoIP. GeoIPDBFile /usr/local/share/GeoIP/GeoIP.dat GeoIPDBFile /usr/local/share/GeoIP/GeoIPCity.dat GeoIPDBFile /usr/local/share/GeoIP/GeoIPOrg.dat # Следующая директива устанавливает где применяется модуль # GeoIP (по крайней мере я так понял) - тока в примечаниях apache (Notes), # только в переменных окружения (Env) или везде (All - по дефолту): GeoIPOutput All # заставляет проверять БД GeoIP.dat чтобы определить, обновлялась ли БД # нужно чтобы не перезапускать апач при обновлении БД GeoIPFlags CheckCache ###### пример блокировки отдельных стран # Блокируем косоглазеньких - всё равно ничё не поймут SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry # Блокируем америкосов - тоже ничё не поймут, тупые слишком. SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry # Что мы, собствено, делаем по вышеуказанным правилам, # это должно быть в директории которую блокируем, т.е. внутри # <Directory "/usr/local/www/data"> # ............... #Deny from env=BlockCountry # </Directory> </IfModule> После чего доступно больше данных (судя по всему есть ещё база провайдеров, т.к. ISP у меня не высвечивается): <pre> <b>Откуда пришел</b> <?php $country_code = apache_note("GEOIP_COUNTRY_CODE"); $region = apache_note("GEOIP_REGION"); $country_name = apache_note("GEOIP_COUNTRY_NAME"); $city = apache_note("GEOIP_CITY"); $connect_type = apache_note("GEOIP_NETSPEED"); $dma_code = apache_note("GEOIP_DMA_CODE"); $area_code = apache_note("GEOIP_AREA_CODE"); $latitude = apache_note("GEOIP_LATITUDE"); $longitude = apache_note("GEOIP_LONGITUDE"); $postal_code = apache_note("GEOIP_POSTAL_CODE"); $organization = apache_note("GEOIP_ORGANIZATION"); $isp = apache_note("GEOIP_ISP"); echo "Код страны: " . $country_code . "\n"; echo "Регион: " . $region . "\n"; echo "Имя страны: " . $country_name . "\n"; echo "Город: " . $city . "\n"; echo "Скорость: " . $connect_type . "\n"; echo "dma_code: " . $dma_code . "\n"; echo "area_code: " . $area_code . "\n"; echo "latitude: " . $latitude . "\n"; echo "longitude: " . $longitude . "\n"; echo "postal_code: " . $postal_code . "\n"; echo "Организация: " . $organization . "\n"; echo "Провайдер: " . $isp . "\n"; ?> Откуда пришел Код страны: RU Регион: 48 Имя страны: Russian Federation Город: Moscow Скорость: dma_code: 0 area_code: 0 latitude: 55.752201 longitude: 37.615601 postal_code: organization:Network of NICEVT isp: Половина пунктов не вполне понятна... Ну да и не важно. Для того что бы модуль показывал регион и город необходимы еще 2 базы: GeoIPCity.dat(19,359,354 байт) и GeoIPOrg.dat(81,218,923 байт), автор за них требует денег, но устаревшую на месяц базу предоставляют в виде GeoLite City http://www.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ RSS ]
  • 1, Sergey (??), 17:22, 17/04/2008 [ответить]  
  • +/
    А чем GeoLiteCity.dat открыть можно?
     
     
  • 2, phpshnik (ok), 23:09, 17/06/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Архиватором.
    И подключить
    ...
    # Указываем путь к БД ...
    GeoIPDBFile     /usr/local/share/GeoIP/GeoLiteCity.dat
    ....
     

  • 3, mihagriha (?), 23:00, 10/04/2014 [ответить]  
  • +/
    www.latlong.ru
    поиск географических координат, расширенный geo ip
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру