屏蔽国内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就可以了 仿唯品会网站需要多少费用?(www.vipshop.com) 到底CSDN上有没有高人解释这个问题啊 mysql如何读取临时表的内容 请教下通达OA的智能表单是哪个开发的 for莱鸟问题. php 我下了一个shop的网站模板,装上了,但是data文件夹里的frm myd myi怎么用?是存储的数据吗?请赐教!! 公共账号联合认证是怎么回事? git使用SSH key去除密码登陆失败,想撤销,回到之前那种输入账号密码的,怎么办 使用php://input 和java数据流传输的问题 求 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下载