Как перенаправить весь диапазон/блок IP-адресов с PHP?

Эти Count() подход может сделать дополнительную работу, поскольку (в TSQL) EXISTS или TOP 1 часто намного более быстры; дб может оптимизировать, "там по крайней мере одна строка". Лично, я использовал бы любой/предикат перегрузку:

if (dc.Users.Any(u => u.Name == name)) {...}

, Конечно, можно сравнить то, что каждый делает путем наблюдения TSQL:

dc.Log = Console.Out;
6
задан aegenes 23 September 2009 в 15:56
поделиться

7 ответов

Попробуйте функцию substr :

$ip = '76.105.99.';
if (substr($_SERVER['REMOTE_ADDR'], 0, strlen($ip)) === $ip) {
    // deny access
}
3
ответ дан 8 December 2019 в 13:47
поделиться

Вот пример того, как вы можете проверить конкретную комбинацию сеть / маска:

$network=ip2long("76.105.99.0");
$mask=ip2long("255.255.255.0");
$remote=ip2long($_SERVER['REMOTE_ADDR']);

if (($remote & $mask)==$network)
{
    header("Location: http://example.com");
    exit;
}

Это лучше, чем использование соответствия на основе строки, поскольку вы можете проверить другие маски, которые выравниваются в пределах октета, например a / 20 блок IP-адресов

11
ответ дан 8 December 2019 в 13:47
поделиться

Кого именно вас интересует блокировка? Вы можете использовать PHP или apache, чтобы заблокировать (или разрешить) несколько определенных IP-адресов.

Если вы заинтересованы, например, в блокировке людей из всей страны, то есть инструменты, которые выдают вам IP-адреса, которые вам нужно заблокировать . К сожалению, это не так просто, как просто указать диапазон.

Посмотрите http://www.blockacountry.com/ , который генерирует кучу IP-адресов, которые вы можете вставить в свой .htaccess, чтобы заблокировать весь стран.

1
ответ дан 8 December 2019 в 13:47
поделиться

Вы можете подойти к проблеме иначе.

Если вы хотите заблокировать 76.105.99. *, Вы можете сделать:

if (strpos($_SERVER['REMOTE_ADDR'], "76.105.99.")!==FALSE)
{
    header ('Location: http://google.com');
} 
3
ответ дан 8 December 2019 в 13:47
поделиться

Лучше сделать это в apache ( или любой другой сервер)

0
ответ дан 8 December 2019 в 13:47
поделиться

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

. Так, например, вы должны иметь возможность сказать

- это 192.168.1.5

внутри

192.168.1.0/24

Эту функцию легко написать, если у вас есть базовые инструменты для работы с CIDR.

Если вы используете 32-битную систему, этот класс http://snipplr.com/view/15557/cidr-class-for-ipv4/ Обратите внимание на функцию IPisWithinCIDR

1
ответ дан 8 December 2019 в 13:47
поделиться

Я считаю, что вам нужно создать цикл for для добавления каждого IP-адреса. адрес (в пределах диапазона) к вашему массиву.

псевдокод

for i = 0 to 255
    disallowed[i] = "76.105.99." + i
next
0
ответ дан 8 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: