За последние 24 часа нас посетили 20502 программиста и 1009 роботов. Сейчас ищут 370 программистов ...

блокировка ip па маске. сработает?

Тема в разделе "PHP для новичков", создана пользователем nuzica, 10 ноя 2022.

Метки:
?

Это сработает?

Голосование закрыто 11 ноя 2022.
  1. Да

    0 голосов
    0,0%
  2. Нет

    100,0%
  3. Сложно ответить...

    0 голосов
    0,0%
  1. nuzica

    nuzica Гость

    С нами с:
    10 ноя 2022
    Сообщения:
    1
    Симпатии:
    0
    Здравствуйте. Как можно сделать блокировку IP по маске?
    Например, есть IP c маской вида: 94.206.209.204/30

    Вставляю этот IP с мaской 94.206.209.204/30 в black_list.txt
    Чтобы произошла блокировка по всей маске.

    P.S. Скрипт блокировки доступа к сайту по IP.

    Это сработает?

    PHP:
    1. <?php
    2. $file = file('black_list.txt', FILE_IGNORE_NEW_LINES);
    3. $cr = array();
    4. foreach($file as $value)
    5. {
    6.   list($ip, $date) = explode('|', $value);
    7.   $cr[] = $ip;
    8. }
    9. if(in_array($_SERVER['REMOTE_ADDR'],$cr) ){
    10. echo "Blocked!";
    11. exit();
    12. }
    13. ?>
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    Нет конечно
    посмотрите что выведет $_SERVER['REMOTE_ADDR'] ... и все станет ясно

    ну и разделом для Профи - тут не пахнет... скорее для новичков
     
  3. yuliaa22

    yuliaa22 Гость

    С нами с:
    11 ноя 2022
    Сообщения:
    1
    Симпатии:
    0
    Вот допустим, но всё равно не работает... на хостинге.
    Может кто подсказать?

    PHP:
    1. <?php
    2. // Функция проверки вхождения IP-адреса в подсеть:
    3. $ip = $_SERVER['REMOTE_ADDR'];
    4. function ip_in_net($ip, $net, $mask) {
    5. // Преобразование IP в беззнаковое десятичное целое число:
    6. $ip = (int)sprintf("%u", ip2long($ip));
    7. $mask = (int)sprintf("%u", ip2long($mask));
    8. $net = (int)sprintf("%u", ip2long($net));
    9. if (($ip & $mask) == $net) {
    10. return 1;
    11. }
    12. else {
    13. return 0;
    14. }
    15. }
    16. // Поскольку подсети записаны в формате 127.0.0.0/8, то понадобится функция перевода CIDR в обычную маску: 127.0.0.0/255.0.0.0:
    17. function cidr_to_mask($mask) {
    18. return long2ip(pow(2, 32)-pow(2, (32-$mask)));
    19. }
    20. // Загружаем файл с базой подсетей, не забываем указать правильный путь к файлу:
    21. $file = $_SERVER['DOCUMENT_ROOT'].'black_list.txt';
    22. // Если файл существует и доступен для чтения:
    23. if (is_readable($file)) {
    24. // Считываем файл в массив:
    25. $nets = @file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    26. // Проходим массив циклом:
    27. for($i = 0, $size = sizeof($nets); $i < $size; $i++) {
    28. // Если строка существует:
    29. if ($nets[$i]) {
    30. // Разбиваем строку на массив, в качестве значений используются адрес и маска подсети:
    31. $line = explode('/', $nets[$i]);
    32. $mask = cidr_to_mask($line[1]); // Переводим CIDR в обычную маску
    33. $net = $line[0];
    34. // Проверяем вхождение IP-адреса в подсеть:
    35. if (ip_in_net($ip, $net, $mask)) {
    36. // Если IP-адрес входит в подсеть, выводим результат:
    37. echo 'Адрес '.$ip.' входит в подсеть '.$net.'/'.$mask;
    38. // Или задаем значение переменной $ip для использования за пределами данного цикла (в правиле ниже):
    39. $ip = 'yes';
    40. break; // Прерываем цикл
    41. }
    42. }
    43. }
    44. }
    45. ?>