有一外贸网站想屏蔽国内IP,但我们自己需要管理和允许特定的国内用户访问所以要进行身份验证,请问这样的功能要怎样实现呢?第一次发帖,请大家多关注!谢谢!

解决方案 »

  1.   

    你说的是利用.htaccess文件进行屏蔽吧,其实这个我已经弄好了的,可以用,只是公司用的是动态IP,每天都得增加新的允许访问的IP,另一方面,如果国内的客户要访问的话,要问他要IP地址那有点别扭了,所以最好的解决办法是国内IP要访问必须要进行身份验证。我找到下面这篇文章,http://hi.baidu.com/511903386/blog/item/799d105ccb0b3d4ffbf2c09c.html,但是做了好久都没法实现想要的效果,它就不停地验证,没法进去,好郁闷呀!不过也要谢谢你!
      

  2.   

    可以做个页面,在用户访问时,
    1.获取用户的IP
    2.然后到开放的IP接口去查询用户的地理位置(例如新浪、网易、ip138,都有开放的ip查询接口)
    3.有了用户的地理位置,再决定是屏蔽之,还是验证之
      

  3.   

    .htaccess可以但管理不太方便咯。你用个mysql ip 表。进来是查询下判断一下,不通过直接exit。
    通过或有验证通过就写个cookie或session标识下,下次直接访问了。
    代码要你自己写了。
      

  4.   


    function sina($ip)
    {
    $php_runtime = microtime(TRUE);
    $str = file_get_contents("http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=".$ip);
    $tmp = explode(" ",$str);
    (isset($tmp[4]) && !empty($tmp[4])) ? $location['country'] = $tmp[4] : $location['country'] = null;
    (isset($tmp[5]) && !empty($tmp[5])) ? $location['city'] = $tmp[5] : $location['city'] = null;
    (empty($tmp[6]) || !preg_match("/电/",$str) || !preg_match("/通/",$str)) ? $location['sp'] = $tmp[7] : $location['sp'] = $tmp[6]; $location['time'] = microtime(TRUE) - $php_runtime;
    if(!empty($location))
    return $location;
    else
    return false;
    }
    从新浪的ip接口获取用户地理位置数据,你可以自己再根据需要改一下
      

  5.   

    通过用户来访的IP地址可以算出该IP属于哪个子网,如110.80.0.0/13
    将全中国可划分的子网存在一个数组中,判断是否在这个数组中就行了。不需要再去其他接口查询地址,然后根据地址或运营商的名字来判断,反而麻烦。
    PS:这个数组不大,不到800条。换算的方法请看此页面:http://url.cn/0TCFrY  内附全中国可划分子网的excel下载
      

  6.   

    在蓝色理想里也有一个比较好的方法 http://bbs.blueidea.com/forum.php?mod=viewthread&tid=2364567
      

  7.   

    ftp://ftp.apnic.net/public/apnic/stats/apnic/delegated-apnic-latestapnic|CN|ipv4|180.212.0.0|131072|20091001|allocated这就是国内的. 分析提取. 然后过滤IP就可以了