IPアドレスが指定した範囲内にあるかどうか判別する

  • 45
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

アクセスしてきたIPアドレスが、サブネットマスクを含んだ指定のIPアドレスに該当するものかどうかを判断します。

$accept = '203.0.113.0/24';
$remote_ip = $_SERVER['REMOTE_ADDR'];

list($accept_ip, $mask) = explode('/', $accept);
$accept_long = ip2long($accept_ip) >> (32 - $mask);
$remote_long = ip2long($remote_ip) >> (32 - $mask);
if ($accept_long == $remote_long) {
    echo 'acceptable';
} else {
    echo 'not acceptable';
}

ip2long()で変換したものをビットシフトし、サブネットマスク部分同士(上の例だと上位24ビット)が同じかどうかを比較しています。

PHPマニュアル - ip2long
PHPマニュアル - ビット演算子