如何使用PHP重定向整个范围/ IP地址块?

时间:2009-09-23 15:56:35

标签: php redirect ip

我正在使用以下代码段来重定向IP地址数组。我想知道如何将整个范围/块的IP地址添加到我的不允许的数组......

<?php // Let's redirect certain IP addresses to a "Page Not Found"
$disallowed = array("76.105.99.106");
$ip = $_SERVER['REMOTE_ADDR']; 

if(in_array($ip, $disallowed)) {
 header("Location: http://google.com");
 exit;
}
?>

我尝试使用“76.105.99。*”,“76.105.99”,“76.105.99.0-76.105.99.255”没有任何运气。

出于其他原因,我需要使用PHP而不是mod_rewrite和.htaccess。

9 个答案:

答案 0 :(得分:11)

以下是如何检查特定网络/掩码组合的示例:

$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

答案 1 :(得分:3)

尝试substr功能:

$ip = '76.105.99.';
if (substr($_SERVER['REMOTE_ADDR'], 0, strlen($ip)) === $ip) {
    // deny access
}

答案 2 :(得分:3)

您可以用不同的方式解决问题。

如果你想禁止76.105.99。*你可以这样做:

if (strpos($_SERVER['REMOTE_ADDR'], "76.105.99.")!==FALSE)
{
    header ('Location: http://google.com');
} 

答案 3 :(得分:1)

你对阻塞感兴趣的是谁?您可以使用PHP或apache来阻止(或允许)一堆特定的IP地址。

如果您对阻止来自整个国家/地区的人员感兴趣,那么有些工具可以为您提供阻止所需的IP地址。不幸的是,它并不像指定范围那么简单。

查看http://www.blockacountry.com/,它会生成一堆你可以插入.htaccess的ip地址来阻止整个国家。

答案 4 :(得分:1)

您需要做的是进行测试,以查看特定地址是否位于CIDR定义的特定地址范围内

例如,您需要能够说

是192.168.1.5

里面

192.168.1.0/24

假设您有一些基本工具来执行CIDR工作,那么该函数很容易编写。

假设您使用的是32位系统,此课程http://snipplr.com/view/15557/cidr-class-for-ipv4/ 注意IPisWithinCIDR功能

答案 5 :(得分:0)

最好在apache(或任何其他服务器)中执行此操作

答案 6 :(得分:0)

我相信你需要创建一个for循环来将每个IP地址(在该范围内)添加到你的数组中。

伪代码

for i = 0 to 255
    disallowed[i] = "76.105.99." + i
next

答案 7 :(得分:0)

$blocked_ip_range_array = array('109.237.108.0','109.238.0.0');
for($i=0;$i<count($blocked_ip_range_array);$i++){
    $network=ip2long($blocked_ip_range_array[$i]);
    $blipr = explode(".",$blocked_ip_range_array[$i]);
    if($blipr[2]=='0'){
        $mask=ip2long("255.255.0.0");
    }
    else{
        $mask=ip2long("255.255.255.0");
    }
    $remote=ip2long($_SERVER['REMOTE_ADDR']);
    if (($remote & $mask)==$network)
    {
        header("Location: http://xurcun.info");
        exit;
    }
}    

答案 8 :(得分:-2)

以下是一个显示与Dixon先生和Ameer先生讨论的内容非常类似的网址: http://www.blackdog.ie/blog/blocking-ip-ranges-with-php/

希望这有帮助。

尊敬, 威尔