IP確認処理

IPのチェックを行うときに便利だったので、メモ。

サブネットマスクを用いたIP確認関数

/**
* IPアドレス判定
* @param $check_ip:チェックするIP
* @param $ip_addr_list:IPの配列
* @return boolean
*/
function ip_addr_match ($check_ip , $ip_addr_list) {
$ret = false;
while (list (, $ip) = each ($ip_addr_list)) {
//$ipがIPアドレスのとき
if (preg_match('/^\d+\.\d+\.\d+\.\d+$/', $ip)) {
if ($ip == $check_ip){$ret=true;break;}
//$ipがIPアドレス+マスクビット長のとき
} elseif (preg_match('/^(\d+)\.(\d+)\.(\d+)\.(\d+)\/(\d+)$/', $ip, $m)) {
$ipaddr = $m[1]<<24 | $m[2]<<16 | $m[3]<<8 | $m[4];
$mask = -1 ^ ((1 << (32-$m[5]) ) -1);
preg_match('/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/', $check_ip, $h);
$host_addr = $h[1]<<24 | $h[2]<<16 | $h[3]<<8 | $h[4];
$common = $ipaddr ^ $host_addr;
$common = $common & $mask;
if ($common == 0){$ret=true;break;}
}
}
return $ret;
}

確認したいIPと許可するIPの配列を与えてやるだけ。
許可するIPの配列はarray("192.168.0.0/16","111.111.111.1");とかするだけでOK。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です