屏蔽国内IP,访问需要进行身份验证 有一外贸网站想屏蔽国内IP,但我们自己需要管理和允许特定的国内用户访问所以要进行身份验证,请问这样的功能要怎样实现呢?第一次发帖,请大家多关注!谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你说的是利用.htaccess文件进行屏蔽吧,其实这个我已经弄好了的,可以用,只是公司用的是动态IP,每天都得增加新的允许访问的IP,另一方面,如果国内的客户要访问的话,要问他要IP地址那有点别扭了,所以最好的解决办法是国内IP要访问必须要进行身份验证。我找到下面这篇文章,http://hi.baidu.com/511903386/blog/item/799d105ccb0b3d4ffbf2c09c.html,但是做了好久都没法实现想要的效果,它就不停地验证,没法进去,好郁闷呀!不过也要谢谢你! 可以做个页面,在用户访问时,1.获取用户的IP2.然后到开放的IP接口去查询用户的地理位置(例如新浪、网易、ip138,都有开放的ip查询接口)3.有了用户的地理位置,再决定是屏蔽之,还是验证之 .htaccess可以但管理不太方便咯。你用个mysql ip 表。进来是查询下判断一下,不通过直接exit。通过或有验证通过就写个cookie或session标识下,下次直接访问了。代码要你自己写了。 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接口获取用户地理位置数据,你可以自己再根据需要改一下 通过用户来访的IP地址可以算出该IP属于哪个子网,如110.80.0.0/13将全中国可划分的子网存在一个数组中,判断是否在这个数组中就行了。不需要再去其他接口查询地址,然后根据地址或运营商的名字来判断,反而麻烦。PS:这个数组不大,不到800条。换算的方法请看此页面:http://url.cn/0TCFrY 内附全中国可划分子网的excel下载 在蓝色理想里也有一个比较好的方法 http://bbs.blueidea.com/forum.php?mod=viewthread&tid=2364567 ftp://ftp.apnic.net/public/apnic/stats/apnic/delegated-apnic-latestapnic|CN|ipv4|180.212.0.0|131072|20091001|allocated这就是国内的. 分析提取. 然后过滤IP就可以了 smarty 截取问题,请教,谢谢! php hash 数组问题!! dedecms 内容模板 调用栏目内容问题 js乱码问题困惑一上午了..... 请问目前PHP BLOG开源那个是最好的? open flash chart 作图 PHP单据修改 实现总计金额 房屋中介后台管理系统 [求助] zend studio与XDebug调试。进度一直停留在57%,waiting for xdebug session 关于构造函数析造函数,大神进来瞧瞧 求 log4php 的中文资料 关于FCKEDITOR调用不出来,求大神指点。
1.获取用户的IP
2.然后到开放的IP接口去查询用户的地理位置(例如新浪、网易、ip138,都有开放的ip查询接口)
3.有了用户的地理位置,再决定是屏蔽之,还是验证之
通过或有验证通过就写个cookie或session标识下,下次直接访问了。
代码要你自己写了。
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接口获取用户地理位置数据,你可以自己再根据需要改一下
将全中国可划分的子网存在一个数组中,判断是否在这个数组中就行了。不需要再去其他接口查询地址,然后根据地址或运营商的名字来判断,反而麻烦。
PS:这个数组不大,不到800条。换算的方法请看此页面:http://url.cn/0TCFrY 内附全中国可划分子网的excel下载