サブネットマスクを用いた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。
コメントを残す
コメントを投稿するにはログインしてください。