PDA

Просмотр полной версии : Как блокировать посетителей из опр.Страны?


ZemoN
08.11.2008, 21:07
Всем здрасти.
Вопрос таков: как мне заблокировать через .htaccess посетителей из определенной страны? у меня в наличии уже есть база от maxmind в формате "*.csv", сведения в ней даются в следующей форме:
beginIp,"endIp","beginIpNum","endIpNum","countryCode","countryName"
2.6.190.56,"2.6.190.63","33996344","33996351","GB","United Kingdom"
3.0.0.0,"4.17.135.31","50331648","68257567","US","United States"
4.17.135.32,"4.17.135.63","68257568","68257599","CA","Canada"
4.17.135.64,"4.17.142.255","68257600","68259583","US","United States"
4.17.143.0,"4.17.143.15","68259584","68259599","CA","Canada"
ну и т.д. (всего около 95000 строк)
Соответственно тут указывается диапозон Ip и его страна...
П.С. в ПШП я не ахти ((

Pashkela
08.11.2008, 21:58
GeoIp

ZemoN
08.11.2008, 22:00
да дело то в том что модуль GeoIp никак не поставить..... хост капризничает (

Pashkela
08.11.2008, 22:01
Хостер не поддерживает PHP? Народ.сру?

ZemoN
08.11.2008, 22:03
у меня McHost.ru .... вот тока они говорят что мол виртуальный хостинг не поддерживает модуль GeoIp и так далее бла бла бла (((

какже быть?

кстати в .htaccess так писать мона:
Order Allow, Deny
Deny from 2.6.190.1-2.6.190.56

мол разрешить всем кроме данного диопозона Ip

Pashkela
08.11.2008, 22:21
<?php
$t= array();
$strana = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$t = explode(',',$strana);
if($t[0]!='ru')
{
echo "Доступ запрещен!";
}
else
{
echo "Добро пожаловать:)";
}
?>

ZemoN
08.11.2008, 22:24
разжуй пожалуйста принцип его работы

Pashkela
08.11.2008, 22:29
выцепляет приоритетный язык юзера, чтобы понять, как это работает, запусти такой код:


<?php
$t= array();
$strana = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$t = explode(',',$strana);
print_r ($t);
?>


Способ не ахти какой, но китайцев и прочих отсеет на раз:)

nerezus
08.11.2008, 22:54
Pashkela, ему надо по IP, а не по языку. Эти понятия никак не связаны.

Решение правильное дали: GeoIP.

Pashkela
08.11.2008, 22:55
Ну так, как вариант. А так, конечно, и думать нечего - нафик такого хостера

Pashkela
08.11.2008, 23:13
2 ZemoN:

не парься, все проще, чем ты думаешь:

http://php.mirror.camelnetwork.com/manual/ru/ref.geoip.php

Pashkela
09.11.2008, 00:29
В общем вот решение:

1. Скачай это: http://stream.ifolder.ru/8975851

там три файла:

1) GeoIP.dat
2) geoip.inc
3) GeoIPCountryWhois.rar - здесь расшифровка стран по первым двум символам

распакуй и скопируй всё в одну папку, туда же положи скрипт следующий:


<?php
require_once("geoip.inc");
$gi = geoip_open("GeoIP.dat",GEOIP_STANDARD);
$ip = $_SERVER['REMOTE_ADDR'];
$code = geoip_country_code_by_addr($gi, $ip);
echo $code;
?>


и наслаждайся:)

А хостер твой наверное подумал, что ты его просишь установить это (кстати еще один вариант):

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

ZemoN
09.11.2008, 04:00
..... сори за тупой вопрос, а куда воще пшп ставить? делать отдельный файл? или как?

_____

да еще как переделать купленный уже "GeoIP-108.csv" в "GeoIP.dat" или этого не нужна делать?

вообщем вопросов просто КУЧА ))

Pashkela
09.11.2008, 04:09
http://freshcoder.ru/archives/19

ZemoN
09.11.2008, 04:13
ну с пшп понятно.... а как его привязать? кстати нашел вот статеку
http://aleksey.nemiro.ru/my/articles/asp/Extracting-the-Country-from-the-IP-Address-How-To.html?page=1#add
ток немогу пока разобраться с запретом для целой страны

ZemoN
09.11.2008, 14:45
Ладно... перефразирую вопрос :
Как технически (желательно готовый пример) осуществить блокировку России на сайт?
В наличии ИМЕЕТСЯ:
-база Ip по странам от MaxMind в формате "*.csv" и "*.dat"
В наличии НЕ ИМЕЕТСЯ:
-возможность поставить модуль GeoIp на хост
-знание ПШП и ASP/VBScript

Pashkela
09.11.2008, 15:43
Скачать то, что выложено выше и вставить в свой index.php следующий код:


<?php
require_once("geoip.inc");
$gi = geoip_open("GeoIP.dat",GEOIP_STANDARD);
$ip = $_SERVER['REMOTE_ADDR'];
$code = geoip_country_code_by_addr($gi, $ip);
if ($code=='RU')
{
header("Location: http://место_для_русских");
}
else
{
exit; // или замени exit на header("Location: http://место_для_нерусских");
}
?>

ZemoN
09.11.2008, 15:54
Скачать то, что выложено выше и вставить в свой index.php следующий код:


<?php
require_once("geoip.inc");
$gi = geoip_open("GeoIP.dat",GEOIP_STANDARD);
$ip = $_SERVER['REMOTE_ADDR'];
$code = geoip_country_code_by_addr($gi, $ip);
if ($code=='RU')
{
header("Location: http://место_для_русских");
}
else
{
exit; // или замени exit на header("Location: http://место_для_нерусских");
}
?>


ВОО ... уже ближе к телу.... возникает следующий вопрос:
- в штмл можно его пихнуть?
- а не нужно ли его (код) пихать во все страницы? малоли из поисковика проиндексируется какаянить друга страница

- файл geoip.inc какое функционалное предназночение имеет? надо ли его както обновлять?
- и можно ли в пшп добавить разрешение для 1 русского Ip ?

Pashkela
09.11.2008, 16:18
Идеальный вариант пихать код в так называемую шапку сайта (или в футер) - т.е. те места, которые отображаются на любой странице сайта.

html - если на народ.ру - то нельзя:) Вернее можно, но смысла не будет

Только на хосте с поддержкой PHP

Обновлять в твоем случае ничего не надо - страны - это не пирожки, чтобы каждый год вылупляться

для одного IP можно, но будет работать, если этот один IP статичный:


<?php
require_once("geoip.inc");
$gi = geoip_open("GeoIP.dat",GEOIP_STANDARD);
$ip = $_SERVER['REMOTE_ADDR'];
if ($ip == '1.1.1.1') {exit;} // IP - исключение из правил
$code = geoip_country_code_by_addr($gi, $ip);
if ($code=='RU')
{
header("Location: http://место_для_русских");
}
else
{
exit; // или замени exit на header("Location: http://место_для_нерусских");
}
?>


ЗЫЖ Прежде чем задавать вопросы "можно/нельзя" - возьми и попробуй. Без попыток что-то сделать самому не поймешь фишку никогда

ZemoN
09.11.2008, 16:26
да кстати что выше будит имееть приоритет: htaccess или ПШП в ШТМЛ ?

Pashkela
09.11.2008, 16:35
.htaccess, всегда

nerezus
10.11.2008, 01:15
Идеальный вариант пихать код в так называемую шапку сайта (или в футер) Фу так делать

http://ru.wikipedia.org/wiki/MVC

ZemoN
12.11.2008, 21:40
Идеальный вариант пихать код в так называемую шапку сайта (или в футер) - т.е. те места, которые отображаются на любой странице сайта.

html - если на народ.ру - то нельзя:) Вернее можно, но смысла не будет

Только на хосте с поддержкой PHP

Обновлять в твоем случае ничего не надо - страны - это не пирожки, чтобы каждый год вылупляться

для одного IP можно, но будет работать, если этот один IP статичный:


<?php
require_once("geoip.inc");
$gi = geoip_open("GeoIP.dat",GEOIP_STANDARD);
$ip = $_SERVER['REMOTE_ADDR'];
if ($ip == '1.1.1.1') {exit;} // IP - исключение из правил
$code = geoip_country_code_by_addr($gi, $ip);
if ($code=='RU')
{
header("Location: http://место_для_русских");
}
else
{
exit; // или замени exit на header("Location: http://место_для_нерусских");
}
?>


ЗЫЖ Прежде чем задавать вопросы "можно/нельзя" - возьми и попробуй. Без попыток что-то сделать самому не поймешь фишку никогда

ты просто ЧЕЛОВЕЧИЩЕ.... огромное СПС
____________
Да как кстати лучше обезопасить GeoIP.dat, ну шоб с сайта не стырили )

Pashkela
12.11.2008, 23:17
сделай такой .htaccess:

Options -Indexes
<Files "GeoIP.dat">
order allow,deny
deny from all
</Files>

ZemoN
12.11.2008, 23:22
кстати пробую щас с таким решением..... что то он не работает (сервак PHP поддерживает) ((
код уже вставлял где не поподя..... просто реакции ни какой .....
что делать??

ZemoN
13.11.2008, 01:11
Pashkela не подскажишь почему вышенаписанный тобой ПШП не работает?

Pashkela
13.11.2008, 02:52
вариантов несколько:

1. твой хост не поддерживает php
2. поддерживает, но php не установлен
3. Неправильно скопировал
4. Не туда вставил
5. Что-то накосячил, когда вставлял
6. Код работает, но, например, не работает твой остальной код
7. http://место_для_русских" - тут должна быть твоя ссылка, а не та хрень, что тут написана
8. etc.......

В общем дофига и больше вариантов. Код рабочий, сам проверял на себе. Если бы код был неправильный, думаю старшие меня бы давно зачмырили - тут же ачад, а не шишки-баб

ZemoN
13.11.2008, 02:59
вариантов несколько:

1. твой хост не поддерживает php
2. поддерживает, но php не установлен
3. Неправильно скопировал
4. Не туда вставил
5. Что-то накосячил, когда вставлял
6. Код работает, но, например, не работает твой остальной код
7. http://место_для_русских" - тут должна быть твоя ссылка, а не та хрень, что тут написана
8. etc.......

В общем дофига и больше вариантов. Код рабочий, сам проверял на себе. Если бы код был неправильный, думаю старшие меня бы давно зачмырили - тут же ачад, а не шишки-баб

1. хост поддерживает php
2. php установлен
3. скопировал и вставил туда, наверно... ) в HTML страницу между тегов head
4. Пять раз перепроверил... все ок
5. какой остальной код может не работать? О_о
6. http://место_для_русских" ну до этого то я допер =)))
Вообщем ХЗ почему он не пашет (((

Pashkela
13.11.2008, 03:05
3. скопировал и вставил туда, наверно... ) в HTML страницу между тегов head


переименуй из .html в .php

Вообще должна быть что-то типо index.php

В обычный .html php-код вставлять нет смысла просто - не будет работать

А вот в .php можно вставлять html-код - будет работать и то и другое

Но тут уже структура твоего сайта может не позволить так сделать. Чтобы проверить, работает код или нет (а также наличие php на сайте) - создай файл test.php и вставть туда код, что выше, а потом просто перейди по адресу http://твой_сайт/test.php

не надо сразу пытаться предложенные скрипты сувать в рабочий код, всегда тести в отдельных файлах

Solker
14.11.2008, 00:40
Pashkela твоя доброта не знает границ.

ZemoN
14.11.2008, 01:17
переименуй из .html в .php

Вообще должна быть что-то типо index.php

В обычный .html php-код вставлять нет смысла просто - не будет работать

А вот в .php можно вставлять html-код - будет работать и то и другое

Но тут уже структура твоего сайта может не позволить так сделать. Чтобы проверить, работает код или нет (а также наличие php на сайте) - создай файл test.php и вставть туда код, что выше, а потом просто перейди по адресу http://твой_сайт/test.php

не надо сразу пытаться предложенные скрипты сувать в рабочий код, всегда тести в отдельных файлах

т.е. как я понял, можно взять просто тупа поменять расширение страничик с HTML на PHP после чего просто отредактировать "a href=" и все будит работать, включая вышенаписанный табой код?
а как это скажится на индиксации сайта?

и еще вопрос:

Подскажите , а лучше покажите готовый пример передачи через mod_rewrite запрос php скрипту, который и выполняет проверку при посещении любой страницы статичного сайта.
просто хочу делать проверку по geoip.

login999
14.11.2008, 10:10
ТС, ставь TDS и не парь мозг ни себе, ни Пашкеле :) - будет тебе и проверка по ГеоИП,и так далее :)

ZemoN
14.11.2008, 22:53
ТС, ставь TDS и не парь мозг ни себе, ни Пашкеле :) - будет тебе и проверка по ГеоИП,и так далее :)
ээээ... а что такое TDS ? :confused:
П.С. я токак начинаю во всем этом разбираться :rolleyes:

ZemoN
15.11.2008, 17:52
создал вот что:
.htaccess-RewriteEngine on
RewriteRule ^.*\.html /script.php

redirect /_vti_bin http://www.microsoft.com
redirect /scripts http://www.microsoft.com
redirect /MSADC http://www.microsoft.com
redirect /c http://www.microsoft.com
redirect /d http://www.microsoft.com
redirect /_mem_bin http://www.microsoft.com
redirect /msadc http://www.microsoft.com
RedirectMatch (.*)\cmd.exe$ http://www.microsoft.com$1

DirectoryIndex index.html
Options -Indexes
script.php-<?php

$file = explode("?", getenv('REQUEST_URI'));
array_pop($file);
$file = $DOCUMENT_ROOT.$file[0];

require_once("geoip.inc");
$gi = geoip_open("GeoIP.dat",GEOIP_STANDARD);
$ip = $_SERVER['REMOTE_ADDR'];
if ($ip == '94.188.51.41')
{
readfile($file);
exit;
}
$code = geoip_country_code_by_addr($gi, $ip);
if ($code=='RU')
{
header("Location: http://yandex.ru");
}
else
{
readfile($file);
}
?> но:
1. Index сначала грузится без фильтра
2. При переходе уже на самом сайте переадрисовывает нежелательного пользователя нормально правда для желательного пользователя грузит пустую страницу(белый экран) а путь вверху показывает правильно

проблема вроде от сюда $file = $DOCUMENT_ROOT.$file[0];в чем тут дело?

vikseriq
16.11.2008, 19:42
хз. тут не так трудно надо:
1 все гоним на обработчик с параметром, он же запрос
2 берем там ип.
3.1 если ип не нужный - гоним через Location : site.ru
3.2 иначе гоним на наш сайт, добавив в строку параметр.

login999
17.11.2008, 09:36
Simple TDS - бесплатная система распределения траффика
http://simpletds.com/