Запретить доступ к сайту из некоторых стран

Тема в разделе "Как сделать...", создана пользователем Juri, 31 июл 2009.

Статус темы:
Закрыта.
  1. Juri

    Juri

    Заблокирован
    Регистр.:
    5 окт 2007
    Сообщения:
    1.065
    Симпатии:
    197
    Интересует такой вопрос, как можно закрыть доступ к сайту из некоторых стран, точнее разрешить всего несолькольким, а остальным закрыть, особенно нужно закрыть для германии и Америки. Понимаю что есть системы типа geoip но поиск по форуму рещультатов не дал, можно ссылки или примеры. заранее спасибо
     
  2. ewg777

    ewg777

    Регистр.:
    6 авг 2007
    Сообщения:
    763
    Симпатии:
    321
  3. Juri

    Juri

    Заблокирован
    Регистр.:
    5 окт 2007
    Сообщения:
    1.065
    Симпатии:
    197
    Спасибо конечно но .htaccess получается больше 3 мегабайт, как это скажется на работе сервера и сайта в целом?

    Если быть точным то нужно что б сайт был доступен только посетителям с этих стран

    Россия
    Азербайджан
    Беларусь
    Грузия
    Казахстан
    Узбекистан
    Украина
     
  4. WerewolfGSM

    WerewolfGSM

    Регистр.:
    4 дек 2006
    Сообщения:
    257
    Симпатии:
    11
    сделать/найти класс, который по входящему ip определяет страну и дальше уже решает, блокировать или пускать дальше.
     
  5. lolhoha

    lolhoha Постоялец

    Регистр.:
    8 мар 2009
    Сообщения:
    148
    Симпатии:
    15
    вот вполне сносная база geoip (сам пользуюсь).
    Перейти по ссылке

    сорри но php я не знаю, скажу на примере C#.

    по теме, нужно экспортировать базу в sql server/mysql/etc, потом скажем в default.master сверять это дело - брать ип юзера (Request.UserHostAddress) потом спомощью методов (см. ниже) узнать страну пользователя, и если она нам подходит или нет то блочить или пропустить. как-то так.


    несколько методов для работы:

    Код:
            /// <summary>
            /// конвертирует ip-адрес в ip-номер
            /// </summary>
            /// <param name="ip">ip-адрес</param>
            /// <returns></returns>
            public string geoipusers(object ip)
            {
                int number = IPAddressToNumber(Convert.ToString(ip));
                string res = GetUserCountry(number);
                if (Convert.ToString(ip).StartsWith("127.0") || Convert.ToString(ip).StartsWith("192.168") || Convert.ToString(ip).StartsWith("10.19"))
                    return ip + " (локальный ip)";
                if (res == null)
                    return ip + " (страна неизвестна)";
                else
                    return ip + " (" + res + ")";
            }
            public int IPAddressToNumber(string IPaddress)
            {
                string[] arrDec;
                int num = 0;
                if (IPaddress != "")
                {
                    arrDec = IPaddress.Split('.');
                    num = (int.Parse(arrDec[3])) + (int.Parse(arrDec[2]) * 256)
                    + (int.Parse(arrDec[1]) * 65536) + (int.Parse(arrDec[0]) * 16777216);
                }
                return num;
            }
            /// <summary>
            /// возвращает страну посетителя по номеру ip
            /// </summary>
            /// <returns></returns>
            /// <param name="number">ip-номер</param>
            public string GetUserCountry(int number)
            {
                SqlCommand cmd = new SqlCommand(string.Format("SELECT countryname FROM [IpToCountry] where '{0}' between beginingip and endingip", number));
                return (string)Db.ExecuteScalar(cmd);
            }
     
  6. WerewolfGSM

    WerewolfGSM

    Регистр.:
    4 дек 2006
    Сообщения:
    257
    Симпатии:
    11
    http://www.codewalkers.com/c/a/Search-Code/PHP-IP-Blocking/
    Вот, принцип блокирования по IP на PHP.
    В файл input.txt ложим список блокированных IP.
    Вот база IP в формате CSV http://ip-to-country.webhosting.info/downloads/ip-to-country.csv.zip
     
  7. AlexSuv

    AlexSuv Постоялец

    Регистр.:
    29 мар 2007
    Сообщения:
    117
    Симпатии:
    21
    А кто мешает использовать тот же Перейти по ссылке

    Выбрать страны, которые хочешь разрешить, создаешь htacees, а потом просто меняешь местами allow и deny


    Т.е. вместо
    <Limit GET HEAD POST>
    order allow,deny
    deny from 196.22.12.0/22
    allow from all
    </LIMIT>

    будет

    <Limit GET HEAD POST>
    order deny,allow
    deny from all
    allow from 196.22.12.0/22
    </LIMIT>
     
  8. Juri

    Juri

    Заблокирован
    Регистр.:
    5 окт 2007
    Сообщения:
    1.065
    Симпатии:
    197
    Всем спасибо, оптимальное решение, кстати бесплатное было найдено тут http://www.maxmind.com/

    база обновляется рас в месяц, качество очень достойное, предлогают много инфы, есть примеры кода. не сочтите за пиар...
     
    swer нравится это.
Статус темы:
Закрыта.