saber 酱的抱枕

Fly me to the moon

01/21
2015
学习

屏蔽北京地区对网站的访问

现在有一个网站,想让北京地区的人打不开。思路是很明确的,通过IP屏蔽,只是怎么实现是个问题。我一开始因为不太了解,在网上查找北京地区的IP段,然后用.htaccess屏蔽。这个就太坑了,因为你不可能把北京地区的IP找全。后来经人指点,使用ip地址查询实现了这个功能。

15/11/10

今天学到了用搜狐ip数据库屏蔽地区的方法,感觉更方便一些。因为搜狐的这个是单纯的js,不涉及到php文件,可以直接加到首页文件里,不用对主页改名,也不用再创建php文件了。

<script type="text/javascript" src="http://pv.sohu.com/cityjson?ie=utf-8" ></script> 
<script>var sf=returnCitySN["cname"]; if(sf.indexOf("北京市")>=0){window.location.href="/404";}</script> 

关于搜狐的这个api,可以参考此处

另一个是新浪的工具:

<script src="http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js" type="text/ecmascript"></script>
<script type="text/javascript">
	var city=remote_ip_info["city"];
	if(city=="北京"){
		//do someting
	 }
 </script>

这个返回值里面还有country属性,可以判断国家或地区哦~


下面的方法是我以前用的,不建议使用。

这个是用查询纯真数据库的方法实现了这个功能。 查看参考网页

我修改后所用的方法是跳转,在主页index.html中没有实质内容,只是链接一个php。php会从数据库查询ip的地区,如果是北京地区的,就输出一个提示信息。如果ip不是北京地区的,则跳转到真正的主页index2.html。

主页中只加这一句代码:

<script type="text/javascript" src="http://www.example.com/example.php"></script>

php中的代码如下:

<?php
header("Content-Type:text/html;charset=utf-8");
  $cip = getenv('REMOTE_ADDR');
  $cip1 = getenv('HTTP_CLIENT_IP');
  $cip2 = getenv('HTTP_X_FORWARDED_FOR');
  $cip1 ? $cip = $cip1 : null;
  $cip2 ? $cip = $cip2 : null;
 $city = file_get_contents('http://www.tnbrj.com/api/ip.php?ip='.$cip.'');
 if(substr_count($city,'北京')){
?>
  var js = document.createElement("body");
  js.innerHTML = "该页不存在!";
  document.getElementsByTagName("html")[0].appendChild(js);
<?php
 }else {
?>
   document.write('<script>location.href="http://www.example.com/index2.html";</script>');
<?php
 }
?>

其中的ip.php是其他网站的,我也没改,因为我自己找不到。我从网上下载的php版纯真ip库是2008年的,错误得没法用。人家这个我还抓不下来,只好先用着了。

我参考的代码里,并不是用的跳转,而是判断ip是北京之后就停止页面的加载。这要求这个代码在所有其他代码之前执行,我用着不生效,只好做成跳转了。

屏蔽北京地区对网站的访问