Редирект по IP-диапазонам на PHP

Йоу.

Нужно определить, принадлежит ли IP посетителя к определённому списку диапазонов, и направить в нужное место в зависимости от этого?

Поехали.

  1. Готовим диапазоны. В моём примере они будут не в отдельном файле, а прямо в скрипте, поэтому нам нужен список диапазонов через пробел (так меньше места в коде займёт). Да, лень делать отдельные файлы.
    Диапазоны в таком формате нужны: 10.25.242.166/32 

    Каждый список диапазонов помещаем в отдельную переменную, например, $mts и $bee:

    $mts = "10.25.242.166/32 80.83.224.0/23 80.83.224.0/24 80.83.228.0/22 80.83.232.0/22 80.83.232.0/23 80.83.236.0/22 80.83.237.0/24 80.83.238.0/24 80.83.238.246/32 80.83.239.0/24 95.153.160.0/19 95.153.192.0/20 95.153.208.0/21 95.153.236.0/23 95.153.240.0/20 193.27.231.0/32 193.27.231.1/32 193.27.231.2/32 193.27.231.3/32 193.27.231.4/32 193.27.231.5/32 193.27.231.6/32 193.27.231.7/32 193.27.231.16/32 193.27.231.17/32 193.27.231.18/32 193.27.231.19/32 193.27.231.20/32 193.27.231.21/32 193.27.231.22/32 193.27.231.23/32 193.27.231.24/32 193.27.231.25/32 193.27.231.32/32 193.27.231.33/32 193.27.231.34/32 193.27.231.35/32 193.27.231.36/32 193.27.231.37/32 193.27.231.38/32 193.27.231.39/32 193.27.231.48/32 193.27.231.49/32 193.27.231.50/32 193.27.231.51/32 193.27.231.52/32 193.27.231.53/32 193.27.231.54/32 193.27.231.55/32 193.27.231.56/32 193.27.231.57/32 193.27.231.60/32 193.27.231.61/32 194.54.148.8/32 195.74.84.32/32 213.87.6.8/32 213.87.8.0/21 213.87.34.0/23 213.87.40.64/28 213.87.40.80/29 213.87.40.88/29 213.87.53.0/24 213.87.54.0/24 213.87.55.0/24 213.87.65.5/32 213.87.65.6/32 213.87.68.0/32 213.87.68.1/32 213.87.68.2/32 213.87.68.3/32 213.87.68.4/32 213.87.68.5/32 213.87.68.6/32 213.87.68.7/32";
    $bee = "31.13.144.2/31 31.13.144.4/30 31.13.144.8/29 31.13.144.16/28 31.13.144.32/28 31.13.144.48/29 31.13.144.56/30 31.13.144.60/31 31.13.144.62/32 46.16.96.0/21 62.33.151.0/24 83.220.227.0/24 83.220.236.1/32 83.220.236.2/31 83.220.236.4/30 83.220.236.8/29 83.220.236.16/28 83.220.236.32/27 83.220.236.64/26 83.220.236.128/25 83.220.237.0/24 83.220.238.0/24 83.220.239.0/25 83.220.239.128/26 83.220.239.192/27 83.220.239.224/28 83.220.239.240/29 83.220.239.248/30 83.220.239.252/31 83.220.239.254/32 85.115.224.9/32 85.115.224.9/32 85.115.224.10/32 85.115.224.10/32 85.115.224.11/32 85.115.224.11/32 85.115.224.12/30 85.115.224.12/32 85.115.224.13/32 85.115.224.14/32 85.115.224.128/27 85.115.224.129/32 85.115.224.130/31 85.115.224.132/30 85.115.224.136/29 85.115.224.144/29 85.115.224.152/30 85.115.224.156/31 85.115.224.158/32 85.115.224.161/32 85.115.224.162/31 85.115.224.164/30 85.115.224.168/29 85.115.224.176/29 85.115.224.184/30 85.115.224.188/31 85.115.224.190/32 85.115.224.193/32 85.115.224.194/31 85.115.224.196/30 85.115.224.200/29 85.115.224.208/29 85.115.224.216/30 85.115.224.220/31 85.115.224.222/32 85.115.224.225/32 85.115.224.226/31 85.115.224.228/30 85.115.224.232/29 85.115.224.240/29 85.115.224.248/30 85.115.224.252/31 85.115.224.254/32 85.115.234.1/32 85.115.234.2/31 85.115.234.4/30 85.115.234.8/29 85.115.234.16/28 85.115.234.32/27 85.115.234.64/26 85.115.234.128/25 85.115.235.0/25 85.115.235.128/26 85.115.235.192/27 85.115.235.224/28 85.115.235.240/29 85.115.235.248/30 85.115.235.252/31 85.115.235.254/32 85.115.243.32/27 85.115.243.33/32 85.115.243.34/31 85.115.243.36/30 85.115.243.40/29 85.115.243.48/29 85.115.243.56/30 85.115.243.60/31 85.115.243.62/32 85.115.248.3/24 85.115.248.1/32 85.115.248.2/31 85.115.248.4/30 85.115.248.8/29 85.115.248.16/28";

    Это списки диапазонов МТС и Билайна, но не советую их использовать. Я больше половины удалил оттуда, сами ищите полные и актуальные 😉

  2. Разобьём строки на массивы:

  3. Следующая функция определяет, входит ли IP в диапазон:

  4. Проверяем по массиву диапазонов:

  5. А мы ещё хотим передать метки через редирект, поэтому сделаем функцию для дописывания хвоста к ссылке:

  6. И в конце направляем куда надо:

  7. Весь код:

(диапазоны ещё больше сократил, а то некрасиво смотрится)

Рабочий пример: определяет, зашёл ли человек с мтс, с билайн или не с того и не с другого

8 thoughts on “Редирект по IP-диапазонам на PHP”

  1. $a_mts = explode(» «, $mts);
    $a_bee = explode(» «, $mts); // Тут в скобочках должно быть не $mts, а $bee

    1. Поправил, спасибо. Ну по сути это просто опечатка, всё остальное вполне рабочее. И напомню, что тут я полные диапазоны не приводил, а для примера их сократил значительно

  2. Скажите, как сделать, чтобы оставлял пользователя на той же странице, на которую зашел, если он не попадет не под один из IP. А то в скрипте по умолчанию другой пользователь редиректится в goOther

  3. подскажите пожалуйста, а как сделать так чтобы если ip не попадал в диапазон то редерикта не происходило и юзер оставался на текущей странице.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *