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

Discussion in 'PHP' started by ZemoN, 8 Nov 2008.

  1. ZemoN

    ZemoN New Member

    Joined:
    8 Nov 2008
    Messages:
    16
    Likes Received:
    0
    Reputations:
    0
    Всем здрасти.
    Вопрос таков: как мне заблокировать через .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 и его страна...
    П.С. в ПШП я не ахти ((
     
  2. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    GeoIp
     
  3. ZemoN

    ZemoN New Member

    Joined:
    8 Nov 2008
    Messages:
    16
    Likes Received:
    0
    Reputations:
    0
    да дело то в том что модуль GeoIp никак не поставить..... хост капризничает (
     
  4. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Хостер не поддерживает PHP? Народ.сру?
     
  5. ZemoN

    ZemoN New Member

    Joined:
    8 Nov 2008
    Messages:
    16
    Likes Received:
    0
    Reputations:
    0
    у меня McHost.ru .... вот тока они говорят что мол виртуальный хостинг не поддерживает модуль GeoIp и так далее бла бла бла (((

    какже быть?

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

    мол разрешить всем кроме данного диопозона Ip
     
    #5 ZemoN, 8 Nov 2008
    Last edited: 8 Nov 2008
  6. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    PHP:
    <?php
    $t
    = array();
    $strana $_SERVER['HTTP_ACCEPT_LANGUAGE'];
    $t explode(',',$strana);
    if(
    $t[0]!='ru'
    {
    echo 
    "Доступ запрещен!";
    }
    else 
    {
    echo 
    "Добро пожаловать:)";
    }
    ?>
     
  7. ZemoN

    ZemoN New Member

    Joined:
    8 Nov 2008
    Messages:
    16
    Likes Received:
    0
    Reputations:
    0
    разжуй пожалуйста принцип его работы
     
  8. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    выцепляет приоритетный язык юзера, чтобы понять, как это работает, запусти такой код:

    PHP:
    <?php 
    $t
    = array(); 
    $strana $_SERVER['HTTP_ACCEPT_LANGUAGE']; 
    $t explode(',',$strana); 
    print_r ($t);
    ?>
    Способ не ахти какой, но китайцев и прочих отсеет на раз:)
     
    #8 Pashkela, 8 Nov 2008
    Last edited: 8 Nov 2008
  9. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    Pashkela, ему надо по IP, а не по языку. Эти понятия никак не связаны.

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

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Ну так, как вариант. А так, конечно, и думать нечего - нафик такого хостера
     
    #10 Pashkela, 8 Nov 2008
    Last edited: 8 Nov 2008
  11. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    2 ZemoN:

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

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

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    В общем вот решение:

    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
     
    #12 Pashkela, 8 Nov 2008
    Last edited: 8 Nov 2008
  13. ZemoN

    ZemoN New Member

    Joined:
    8 Nov 2008
    Messages:
    16
    Likes Received:
    0
    Reputations:
    0
    ..... сори за тупой вопрос, а куда воще пшп ставить? делать отдельный файл? или как?

    _____

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

    вообщем вопросов просто КУЧА ))
     
    #13 ZemoN, 9 Nov 2008
    Last edited: 9 Nov 2008
  14. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    http://freshcoder.ru/archives/19
     
  15. ZemoN

    ZemoN New Member

    Joined:
    8 Nov 2008
    Messages:
    16
    Likes Received:
    0
    Reputations:
    0
    ну с пшп понятно.... а как его привязать? кстати нашел вот статеку
    http://aleksey.nemiro.ru/my/articles/asp/Extracting-the-Country-from-the-IP-Address-How-To.html?page=1#add
    ток немогу пока разобраться с запретом для целой страны
     
  16. ZemoN

    ZemoN New Member

    Joined:
    8 Nov 2008
    Messages:
    16
    Likes Received:
    0
    Reputations:
    0
    Ладно... перефразирую вопрос :
    Как технически (желательно готовый пример) осуществить блокировку России на сайт?
    В наличии ИМЕЕТСЯ:
    -база Ip по странам от MaxMind в формате "*.csv" и "*.dat"
    В наличии НЕ ИМЕЕТСЯ:
    -возможность поставить модуль GeoIp на хост
    -знание ПШП и ASP/VBScript
     
  17. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Скачать то, что выложено выше и вставить в свой 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://место_для_нерусских");
    }
    ?>
     
  18. ZemoN

    ZemoN New Member

    Joined:
    8 Nov 2008
    Messages:
    16
    Likes Received:
    0
    Reputations:
    0
    ВОО ... уже ближе к телу.... возникает следующий вопрос:
    - в штмл можно его пихнуть?
    - а не нужно ли его (код) пихать во все страницы? малоли из поисковика проиндексируется какаянить друга страница

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

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Идеальный вариант пихать код в так называемую шапку сайта (или в футер) - т.е. те места, которые отображаются на любой странице сайта.

    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://место_для_нерусских"); 

    ?>
    ЗЫЖ Прежде чем задавать вопросы "можно/нельзя" - возьми и попробуй. Без попыток что-то сделать самому не поймешь фишку никогда
     
    #19 Pashkela, 9 Nov 2008
    Last edited: 9 Nov 2008
  20. ZemoN

    ZemoN New Member

    Joined:
    8 Nov 2008
    Messages:
    16
    Likes Received:
    0
    Reputations:
    0
    да кстати что выше будит имееть приоритет: htaccess или ПШП в ШТМЛ ?
     
    #20 ZemoN, 9 Nov 2008
    Last edited: 9 Nov 2008