PHPで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。

コメントを残す