zoukankan      html  css  js  c++  java
  • php中禁止单个ip与ip段访问的代码小结

    1.禁止单个IP

    <?php
    //IP访问限制
    if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
    $userip = getenv('HTTP_CLIENT_IP');
    } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
    $userip = getenv('HTTP_X_FORWARDED_FOR');
    } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
    $userip = getenv('REMOTE_ADDR');
    } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
    $userip = $_SERVER['REMOTE_ADDR'];
    }
    $banned_ip = array (
    "127.0.0.1",
    "203.0.0.1",
    "56.12.50.65",
    "192.168.1.88"
    );
    if (in_array($userip,$banned_ip)) {
    die ("Your IP is block to connect !");
    }
    echo "小鱼阁测试";
    ?> 

    2.禁止IP段

    <?php 
    //判断IP访问限制 
    if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { 
    $userip = getenv('HTTP_CLIENT_IP'); 
    } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) { 
    $userip = getenv('HTTP_X_FORWARDED_FOR'); 
    } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { 
    $userip = getenv('REMOTE_ADDR'); 
    } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) { 
    $userip = $_SERVER['REMOTE_ADDR']; 
    } 
    $ban_range_low=ip2long("217.0.0.0"); //ip段首 
    $ban_range_up=ip2long("217.255.255.255");//ip段尾 
    $ip=ip2long($userip]); 
    if ($ip>$ban_range_low && $ip<$ban_range_up) 
    { 
    print "Banned"; 
    exit(); 
    } 
    ?> 

    另外请注意,PHP的ip2long有bug,请慎用

    <?php 
    echo ip2long('58.99.11.1'),"<br/>";   //输出是 979569409 
    echo ip2long('58.99.011.1'),"<br/>";  //输出是 979568897 
    echo ip2long('058.99.11.1'),"<br/>";  //输出是空 
    ?> 

    在PHP 4.x,PHP 5.x中,有前导零的ip转换的结果都不正确。

    解决办法,使用自己的函数:

    function myip2long($ip){ 
       $ip_arr = split('.',$ip); 
       $iplong = (16777216 * intval($ip_arr[0])) + (65536 * intval($ip_arr[1])) + (256 * intval($ip_arr[2])) + intval($ip_arr[3]); 
       return $iplong; 
    }

    完毕!

    转载请注明出处!小鱼阁工作室 -专注zencart建站,织梦企业建站,ecshop商城,二次开发,产品采集,模板修改!技术QQ 631992791
  • 相关阅读:
    【拓扑排序】【堆】CH Round #57
    【数论】【筛法求素数】【欧拉函数】bzoj2818 Gcd
    【数论】【枚举约数】【欧拉函数】bzoj2705 [SDOI2012]Longge的问题
    【暴力】vijos P1897 学姐吃牛排
    【kruscal】【最小生成树】【并查集扩展】bzoj3714 [PA2014]Kuglarz
    【set】bzoj2761 [JLOI2011]不重复数字
    【尺取法】【Multiset】bzoj1342 [Baltic2007]Sound静音问题
    【神奇の做法】bzoj2456 mode
    【博弈论】bzoj2463 [中山市选2009]谁能赢呢?
    【set】bzoj3715 [PA2014]Lustra
  • 原文地址:https://www.cnblogs.com/afish/p/3928656.html
Copyright © 2011-2022 走看看