Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Как блокировать посетителей из опр.Страны? (https://forum.antichat.xyz/showthread.php?t=90975)

ZemoN 08.11.2008 21:07

Как блокировать посетителей из опр.Страны?
 
Всем здрасти.
Вопрос таков: как мне заблокировать через .htaccess посетителей из определенной страны? у меня в наличии уже есть база от maxmind в формате "*.csv", сведения в ней даются в следующей форме:
beginIp,"endIp","beginIpNum","endIpNum","countryCo de","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","C A","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 код:

<?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 код:

<?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 код:

<?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 код:

<?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

Цитата:

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

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 код:

<?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

Цитата:

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

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

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

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

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

PHP код:

<?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

Цитата:

Сообщение от Pashkela
вариантов несколько:

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

Цитата:

Сообщение от ZemoN
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

Цитата:

Сообщение от Pashkela
переименуй из .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

Цитата:

Сообщение от login999
ТС, ставь 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/


Время: 20:12