我正在使用以下代码段来重定向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。
答案 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/
希望这有帮助。
尊敬, 威尔