【问题标题】:Redirecting IP if it's between a certain IP Range如果 IP 在某个 IP 范围之间,则重定向 IP
【发布时间】:2011-03-10 22:39:54
【问题描述】:

如果用户的 ip 在某个 IP 范围之间,我会使用重定向。但是,我正在使用多个 ip 范围,所以我想知道最好的方法来做到这一点。我目前正在使用它来重定向,

但是,如果 IP 范围是 72.122.166.0-72.122.159.266 和 68.61.156.0-68.61.181.255 和 78.121.74.0-78.121.77.255,那我该怎么做?谢谢!

【问题讨论】:

  • 我希望您不要使用它来阻止被 IP 禁止的用户访问您的页面,因为这对于现在人们所拥有的动态 IP 来说几乎没有用处。
  • 另外,请注意72.122.159.26672.122.166.0 不是有效的IP 地址,68.61.181.25578.121.77.255 是广播地址!
  • 查看我的previous answer 示例。

标签: php


【解决方案1】:

检查 IP 范围的最佳方法是将点分地址转换为 32 位数字并对其进行比较。 ip2long 函数可以为您进行转换。例如:

$range_start = ip2long("68.61.156.0");
$range_end   = ip2long("68.61.181.255");
$ip          = ip2long($_SERVER['REMOTE_ADDR']);
if ($ip >= $range_start && $ip <= $range_end) {
  // blocked
}

您可以将其中几个范围放入一个数组中并对其进行迭代以检查多个范围。

【讨论】:

    【解决方案2】:

    如果你愿意使用 SQL,并且有一个 IP 范围表,

    SELECT * FROM `ips` WHERE $ip BETWEEN `start` AND `end`
    

    如果结果为零,则不会被阻止。

    编辑:当然是使用ip2long 函数。

    如果您有很多随机范围,这是一种更好的方法;一个纯 PHP 的方式是更好的。

    【讨论】:

    • 执行起来会很慢吗?
    【解决方案3】:
    <?php
    /* VARIABLES */
    // -------------------------------
    $ip = ip2long($_SERVER['REMOTE_ADDR']);
    $current_ip_range = array(); // Class "X" range.
    
    $range = (object) array();
    //$range->name = '24-Bit Block';
    $range->lower = ip2long('0.0.0.0'); //This is the initial value.
    $range->upper = ip2long('83.50.207.254'); //This is the final value.
    $current_ip_range[] = $range;
    // -------------------------------
    
    if ($ip >= $range->lower && $ip <= $range->upper) 
    {
            /* ----------------------------------------
             * We ask to the server if the IP grabbed
             * is <= or => to the ip ranges and if if does
             * so, shows success message.
             * -------------------------------------- */
            echo "La IP $ip está dentro del rango";
    
    }
    
    else
    {
            /* ----------------------------------------
             * If it isn't, shows a failure message.
             * -------------------------------------- */
            echo "La ip $ip no está dentro del rango";
    
    }
    

    【讨论】:

    • 关于扩展您的答案,而不仅仅是粘贴代码(尽管使用 cmets)。
    猜你喜欢
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 2015-08-19
    • 2018-11-01
    • 2018-01-04
    • 1970-01-01
    相关资源
    最近更新 更多