网站限制屏蔽某一地区访问-精确到国家/省/市IP地址

现在市面上有不少的运营商提供免费的IP库API可供使用,例如淘宝的IP库、IPIP的IP库还有IP138的IP库,这些IP库都是比较精准的,而且官方提供了详细的PHP、JS、ASP等示例文档,有需要的朋友可以参考文档稍微修改就可以拿来用了。

例如:搭建了外贸站,想要设置一下不让国内的竞争同行访问,需要精确到国内某一个省。要想达到这样的效果,就需要利用到IP库了。

这篇文章就来搜集整理一下网站限制IP访问的方法,以及梳理一下国内外免费在线和离线的IP库,方便大家使用。

一、PHP代码-禁止IP访问网站

<?php

/**

*

* test.php(屏蔽国家IP)

*

*/

$verification = '美国';//需要屏蔽国家的IP

function get_client_ip() {

              $ip = $_SERVER['REMOTE_ADDR'];   

        if (isset($_SERVER['HTTP_X_REAL_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_REAL_FORWARDED_FOR'])) {           

        $ip = $_SERVER['HTTP_X_REAL_FORWARDED_FOR'];     

        }         

        elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_FORWARDED_FOR'])) {           

        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];     

        }         

        elseif (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {         

        $ip = $_SERVER['HTTP_CLIENT_IP'];     

        }         

        return $ip;   

        }

$ip = get_client_ip();//获取访客IP

$antecedents = $_SERVER['HTTP_REFERER'];//访客来路地址

$result = file_get_contents("http://ip.taobao.com/service/getIpInfo.php?ip=".$ip);//IP数据库来自淘宝。

$address = json_decode($result,true);

//判断访客是否属于美国,是否来自百度,是否来自谷歌

if($address['data']['country'] == $verification && strpos($antecedents, 'baidu') === false && strpos($antecedents, 'google') === false){

        sleep(10);//设置一个10秒等待。

        header('HTTP/1.1 503 Service Temporarily Unavailable');

        header('Status: 503 Service Temporarily Unavailable');

        header('Retry-After: 3600000');

        exit;

}

?>

如果你想要禁止某一个省份的IP访问你的网站,请使用以下PHP代码:

<?php

/**

*

* test.php(屏蔽地方IP)

*

*/

$verification = '江西省';//需要屏蔽省份的IP

function get_client_ip() {

              $ip = $_SERVER['REMOTE_ADDR'];   

        if (isset($_SERVER['HTTP_X_REAL_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_REAL_FORWARDED_FOR'])) {           

        $ip = $_SERVER['HTTP_X_REAL_FORWARDED_FOR'];     

        }         

        elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_FORWARDED_FOR'])) {           

        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];     

        }         

        elseif (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {         

        $ip = $_SERVER['HTTP_CLIENT_IP'];     

        }         

        return $ip;   

        }

$ip = get_client_ip();//获取访客IP

$antecedents = $_SERVER['HTTP_REFERER'];//访客来路地址

$result = file_get_contents("http://ip.taobao.com/service/getIpInfo.php?ip=".$ip);//IP数据库来自淘宝。

$address = json_decode($result,true);

//判断访客是否属于江西省,是否来自百度,是否来自谷歌

if($address['data']['region'] == $verification && strpos($antecedents, 'baidu') === false && strpos($antecedents, 'google') === false){

  sleep(99999999);//设置一个999999秒的等待。

  Header("HTTP/1.1 204 No Content");

  exit;

}

?>

聪明的朋友一定发现了以上代码其实还可以精确到市一级IP,你只需要替换成city就可以了,代码引用淘宝IP库的格式如下:

二、JS代码-禁止IP访问网站

当特定省份和城市的IP访问你的网站时,使用以下代码可以弹出提示:

<script type="text/javascript" src="https://ip.ws.126.net/ipquery"></script>

<script>

var province=localAddress.province;//获取所在省,比如广东省

var city=localAddress.city;//获取所在市,比如广州市

//判断省

if(province.indexOf('广东')  != -1){

    alert(province);   

    }else{

        }

//判断市

if(city.indexOf('广州')  != -1){

    alert(city);   

    }else{

        }

</script>

当特定省份和城市的IP访问你的网站时,使用以下代码跳转到某一个网址:(其它动作可以根据自定义)

<script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script>

<script>

$.getScript('https://ip.ws.126.net/ipquery', function(){ 

    console.log(localAddress.city)

    if(localAddress.city.indexOf('北京') != -1||localAddress.city.indexOf('杭州') != -1||localAddress.city.indexOf('上海') != -1||localAddress.city.indexOf('广州') != -1||localAddress.city.indexOf('深圳') != -1||localAddress.city.indexOf('东莞') != -1||localAddress.city.indexOf('房山') != -1){       

      window.location.href = 'http://www.520ym.net';     

    }else{       

    return;     

    }

    console.log(localAddress.province)   

    if(localAddress.province.indexOf('福建') != -1){       

      window.location.href = 'http://www.520ym.net';     

    }else{       

    return;     

    }   

});

</script>

三、免费在线和离线IP库汇总

3.1 淘宝IP库

网址:http://ip.taobao.com/

访问方式:http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串],返回内容以json格式。优点:精准度非常高。不足之处:不支持Https。每个用户的访问频率需小于10qps。示例:

#调用

http://ip.taobao.com/service/getIpInfo.php?ip=171.208.203.169

#返回

{"code":0,"data":{"ip":"171.208.203.169","country":"中国","area":"","region":"四川","city":"乐山","county":"XX","isp":"电信","country_id":"CN","area_id":"","region_id":"510000","city_id":"511100","county_id":"xx","isp_id":"100017"}}

3.2 网易IP库

网址:https://ip.ws.126.net/ipquery

示例:

#调用

https://ip.ws.126.net/ipquery?ip=171.208.203.169

#返回

var lo="四川省", lc="乐山市"; var localAddress={city:"乐山市", province:"四川省"}

3.3 搜狐IP库

网址:http://pv.sohu.com/cityjson

3.4 IPIP.net IP库

网址:https://www.ipip.net/support/api.html

IPIP.net IP免费接口,限速每天1000次,示例:

#调用

http://freeapi.ipip.net/118.28.8.8

#返回

["中国","天津","天津","","鹏博士"]

3.5 IP.la IP库

网址:https://www.ip.la/

IP.la 是IPIP.net 搞的海外版,官网说“You can initiate requests without any limit.”示例:

<?php

    $ip = file_get_contents('https://api.ip.la');

    echo "My public IP address is: " . $ip;

?>

3.6 IP138 IP查询

网址:http://user.ip138.com/ip/

示例:

#接口地址

http协议:http://api.ip138.com/query/

https协议:https://api.ip138.com/query/

#调用

http://api.ip138.com/query/?ip=8.8.8.8&callback=find&oid={oid}&mid={mid}&sign=签名算法

3.7 百度地图IP查询

网址:http://lbsyun.baidu.com/

示例:

#调用

https://api.map.baidu.com/location/ip?ak=F454f8a5efe5e577997931cc01de3974&ip=118.28.8.8

#返回

{"address":"CN|\u5929\u6d25|\u5929\u6d25|None|DXTNET|0|0","content":{"address_detail":{"province":"\u5929\u6d25\u5e02","city":"\u5929\u6d25\u5e02","district":"","street":"","street_number":"","city_code":332},"address":"\u5929\u6d25\u5e02","point":{"y":"4715083.22","x":"13047990"}},"status":0}

3.8 腾讯位置服务

网址:https://lbs.qq.com/webservice_v1/guide-ip.html

示例:

#调用

https://apis.map.qq.com/ws/location/v1/ip?ip=61.135.17.68&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77

#返回

{

    "status": 0,

    "message": "query ok",

    "result": {

        "ip": "61.135.17.68",

        "location": {

            "lng": 116.407526,

            "lat": 39.90403

        },

        "ad_info": {

            "nation": "中国",

            "province": "",

            "city": "",

            "district": "",

            "adcode": 110000

        }

    }

}

3.9 ipdatabase-二叉树快速搜索IP地址数据库

网址:https://github.com/wzhe06/ipdatabase

数据源采用2015年广告协会制定的IP地址标准数据库,利用二叉树实现IP查询,首先将10进制IPV4地址转化为二进制构建二叉树,利用二叉树搜索进行搜索,示例:

public void example() throws Exception {

    String ip = "58.30.15.255";

    String region = IpHelper.findRegionByIp(ip);

    System.out.println(region);

}

3.10 ip2region-Binary,B树和纯内存三种查询IP库

网址:https://github.com/lionsoul2014/ip2region

该数据聚合了一些知名ip到地名查询提供商的数据,每条ip数据段都固定了格式:城市Id|国家|区域|省份|城市|ISP,中国的数据精确到了城市,其他国家只能定位到国家。示例:

#调用

php binding/php/testSearcher.php ./data/ip2region.db

#返回

initializing  B-tree ...

+----------------------------------+

| ip2region test script            |

| Author: chenxin619315@gmail.com  |

| Type 'quit' to exit program      |

+----------------------------------+

p2region>> 101.105.35.57

2163|中国|华南|广东省|深圳市|鹏博士 in 0.02295 millseconds

3.11 纯真IP库

网址:http://www.cz88.net/

四、总结

总得来说,免费IP库还是挺多的,无论是付费的IP库或者是免费的IP库都不一定做到100%的准确,尤其是离线的IP库更需要及时更新才可以获取正确的信息。

离线IP库可移植性最强,你可以根据自己的需要整合到JS、PHP、ASP、C#、JAVA等当,在线的IP库API查询受网络以及频率限制的影响,不适用于大型的应用场景。

需要注意的是,IP库在线查询一般会设置有一定的频率限制,例如淘宝的IP库如果一定时间内请求太快的话很容易就变成了502错误了,对企业用户可以选择这些IP库的付费版,可以解决免费IP库各个版本的限制。

最好是本地有库直接解析,不然就容易发生在线库延迟升高了自己网站也在那里卡半天才有反应,所以在线ip库,不适合大流量站。

原文:https://wzfou.com/ip-ku/

参考:https://www.cnblogs.com/wawahaha/p/3546189.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容

  • 网上有老友分享的屏蔽地区代码可以用,但是我拿过来用的时候有一个问题他用到了JavaScript 库和网站的js有冲...
    Linux跟随者阅读 2,956评论 0 0
  • 当我们在页面中填写个人资料中的省市信息时,页面会根据当前用户所在的城市自动选中省市下拉选项;当我们访问某个大型站点...
    jianghu000阅读 6,182评论 2 0
  • IP地址查询接口及调用方法 设计蜂巢IP地址查询接口:http://www.hujuntao.com/api/ip...
    rosekissyou阅读 3,634评论 0 3
  • Nginx简介 解决基于进程模型产生的C10K问题,请求时即使无状态连接如web服务都无法达到并发响应量级一万的现...
    魏镇坪阅读 1,984评论 0 9
  • [toc] 在公司的网站上推荐使用 docker 容器来安装环境,一个项目一个 docker 容器。 、、 百度百...
    Mdvtrw阅读 1,477评论 0 1