.htaccess
个文件,因此我必须使用PHP。
if ($_SERVER['REMOTE_ADDR'] == "89.95.25.37") die();
会阻止特定的IP。如何阻止整个IP块?
非常感谢。
答案 0 :(得分:12)
尝试strpos()
if(strpos($_SERVER['REMOTE_ADDR'], "89.95") === 0)
{
die();
}
如果您发现,===
运营商会确保89.95
位于IP地址的开始。这意味着您可以根据需要分配尽可能多的IP地址,并且无论后面有多少数字都会阻止它。
例如,所有这些都将被阻止:
89.95 - > 89.95.12.34
,89.95.1234.1
,89.95.1.1
89.95.6 - > 89.95.65.34
,89.95.61.1
,89.95.6987
(其中一些不是有效的IP地址)
答案 1 :(得分:4)
使用ip2long()
将点分十进制转换为真实IP地址。然后你可以轻松地做范围。
只需在高低范围内ip2long()
获取值,然后将其用作代码中的常量。
如果您熟悉子网掩码,可以这样做:
// Deny 10.12.*.*
$network = ip2long("10.12.0.0");
$mask = ip2long("255.255.0.0");
$ip = ip2long($_SERVER['REMOTE_ADDR']);
if (($network & $mask) == ($ip & $mask)) {
die("Unauthorized");
}
或者如果您熟悉此格式10.12.0.0/16
:
// Deny 10.12.*.*
$network = ip2long("10.12.0.0");
$prefix = 16;
$ip = ip2long($_SERVER['REMOTE_ADDR']);
if ($network >> (32 - $prefix)) == ($ip >> (32 - $prefix)) {
die("Unauthorized");
}
您可以将这些功能转换为功能并具有非常易于管理的代码,从而可以轻松添加IP地址并自定义范围。
答案 2 :(得分:3)
将虚线四边形转换为整数:
$ip = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR']));
// only allow 10.0.0.0 – 10.255.255.255
if (!($ip >= 167772160 && $ip <= 184549375)) {
die('Forbidden.');
}
答案 3 :(得分:1)
制作一个子串:) 例如,阻止89.95.25。*你创建一个IP的子字符串,切断最后两个数字并将其与“89.95.25”进行比较。
答案 4 :(得分:1)
$user_ip = $_SERVER['REMOTE_ADDR']; // get user ip
$denyIPs = array("111.111.111", "222.222.222", "333.333.333");
if (in_array ($user_ip, $denyIPs)) {
// blocked ip
}
else {
// not blocked
}
答案 5 :(得分:0)
使用revive的代码,使用它来进行通配符搜索
// Now let's search if this IP is blackliated
$status = false;
foreach($denied_ips as $val)
{
if (strpos($val,'*') !== false)
{
if(strpos($visitorIp, array_shift(explode("*", $val))) === 0)
{
$status = true;
break;
}
}
else
{
if(strcmp($visitorIp, $val) === 0)
{
$status = true;
break;
}
}
}
答案 6 :(得分:-2)
$deny = array("111.111.111", "222.222.222", "333.333.333");
if (in_array($_SERVER['REMOTE_ADDR'], $deny)) {
header("location:http://www.google.com/");
exit();
}