Меню
- Главная
- Скрипты
- Шаблоны сайта
- Книги
- Фон для сайта
- Анимированные картинки
- Лохотроны и кидалово в интернете
- Статьи
Партнерские программы:
- Заработок на соцсетях
- разные


Реклама




Информация
Обо всех новых добавлениях на сайт вы можете узнать подписавшись в
_________
Яндекс.Метрика


 
Модуль определения географического положения по IP - mod_GeoIP.

Модуль определения географического положения по IP - mod_GeoIP.


Неплохой модуль для 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

Info:   An Apache module that provides the country code of the client's IP

Maint:  seanc@FreeBSD.org

B-deps: GeoIP-1.3.14 apache-1.3.34_3 expat-1.95.8_3 perl-5.8.7_2

R-deps: GeoIP-1.3.14 apache-1.3.34_3 expat-1.95.8_3 perl-5.8.7_2

WWW:    http://www.maxmind.com/app/mod_geoip

Port:   mod_geoip2-1.1.7

Path:   /usr/ports/www/mod_geoip2

Info:   An Apache module that provides the country code of the client's IP

Maint:  jau@iki.fi

B-deps: GeoIP-1.3.14 apache-2.0.55_2 expat-1.95.8_3 libiconv-1.9.2_1 perl-5.8.7_2

R-deps: GeoIP-1.3.14 apache-2.0.55_2 expat-1.95.8_3 libiconv-1.9.2_1 perl-5.8.7_2

WWW:    http://www.maxmind.com/app/mod_geoip

/usr/ports/>cd /usr/ports/www/mod_geoip

/usr/ports/www/mod_geoip/>make && make install && make clean

......................................

......................................

************************************************************

Please edit your apache.conf or httpd.conf to enable and

setup this module.

You can always refer to the useful documents held in

${PREFIX}/share/doc/mod_geoip/, where ${PREFIX} is

typically /usr/local.

When it's done, do the following to take effect:

  apachectl configtest  (and correct any errors reported)

  apachectl restart

************************************************************

/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

/usr/ports/www/mod_geoip/>

Он за собой тащит собственно 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:

Половина пунктов не вполне понятна... Ну да и не важно.

Назад
Автор: lissyara
Сайт автора: lissyara.su