[PHP] IP アドレスをチェックする

function is_ip_range($ip, $range) {
  if (!($ip = ip2long($ip)))
    return false;

  // マスク指定
  if(strchr($range, '/')){
    list($net, $mask) = split('/', $range);

    if (!($net = ip2long($net)))
      return false;
    if (is_numeric($mask))
      $mask = long2ip(bindec(str_repeat('1', $mask) . str_repeat('0', 32 - $mask)));
    if (!($mask = ip2long($mask)))
      return false;

      return (($ip & $mask) === ($net & $mask)) ? true : false;

  // 範囲指定
  } elseif (strchr($range, '-')) {
    $range = split('-', $range);
    if (!($range[0] = ip2long($range[0])))
      return false;
    if (!($range[1] = ip2long($range[1])))
      return false;
    return ($range[0] <= $ip && $ip <= $range[1]) ? true : false;

  } elseif ($range = ip2long($range)) {
    return ($range === $ip) ? true : false;
  }

  return false;
}

is_ip_range('192.168.0.1', '192.168.0.0/24') とか is_ip_range('192.168.0.1', '192.168.0.0/255.255.255.0') とか is_ip_range('192.168.0.1', '192.168.0.1-192.168.0.254') とかすれば良いよ。


Posted

in

by

Tags:

Comments

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。