6

次のスニペットを使用して、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」を運が悪かったので使ってみました。

他の理由で、mod_rewriteや.htaccessではなくPHPを使用する必要があります。

4

9 に答える 9

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;
}

これは、文字列ベースの一致を使用するよりも優れています。たとえば、IPの/20ブロックなどのオクテット内で整列する他のマスクをテストできるためです。

于 2009-09-23T16:02:12.727 に答える
3

関数を試してくださいsubstr

$ip = '76.105.99.';
if (substr($_SERVER['REMOTE_ADDR'], 0, strlen($ip)) === $ip) {
    // deny access
}
于 2009-09-23T16:00:55.480 に答える
3

別の方法で問題に取り組むことができます。

76.105.99。*を禁止したい場合は、次のことができます。

if (strpos($_SERVER['REMOTE_ADDR'], "76.105.99.")!==FALSE)
{
    header ('Location: http://google.com');
} 
于 2009-09-23T16:03:56.560 に答える
1

誰をブロックすることに興味がありますか?PHPまたはApacheを使用して、特定のIPアドレスの束をブロック(または許可)することができます。

たとえば、国全体の人々をブロックすることに関心がある場合は、ブロックする必要のあるIPアドレスを提供するツールがあります。残念ながら、範囲を指定するほど簡単ではありません。

http://www.blockacountry.com/をチェックしてください。これは、国全体をブロックするために.htaccessに貼り付けることができる一連のIPアドレスを生成します。

于 2009-09-23T16:00:30.610 に答える
1

あなたがする必要があるのは、特定のアドレスがCIDRによって定義された特定のアドレス範囲内にあるかどうかを確認するためのテストを行うことです

たとえば、あなたは言うことができる必要があります

192.168.1.5です

中身

192.168.1.0/24

CIDR作業を行うための基本的なツールがいくつかあると仮定すると、この関数は簡単に記述できます。

32ビットシステムを使用していると仮定すると、このクラスはhttp://snipplr.com/view/15557/cidr-class-for-ipv4/IPisWithinCIDR 関数に注意してください。

于 2009-09-23T16:11:17.053 に答える
0

apache(または他のサーバー)でこれを行う方が良いでしょう

于 2009-09-23T15:59:58.697 に答える
0

各IPアドレス(範囲内)を配列に追加するには、forループを作成する必要があると思います。

擬似コード

for i = 0 to 255
    disallowed[i] = "76.105.99." + i
next
于 2009-09-23T16:01:26.167 に答える
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;
    }
}    
于 2011-09-01T18:54:04.143 に答える
-2

以下は、Dixon氏とAmeerが話し合っているものにかなり似たものを示すURLです: http ://www.blackdog.ie/blog/blocking-ip-ranges-with-php/

お役に立てれば。

敬具、ウィル

于 2013-08-27T23:21:51.667 に答える