欢迎光临
我们一直在努力

网站限制IP地址访问-免费在线和离线IP库精确到国家/省/市IP地址

现在搭建网站,有面向国外的,有面向国外,还有一些是面向特定用户的。有朋友在其云否主机上搭建了外贸站,想要设置一下不让国内的竞争同行访问,需要精确到国内某一个省。要想达到这样的效果,就需要利用到IP库了。
现在市面上有不少的运营商提供免费的IP库API可供使用,例如淘宝的IP库、IPIP的IP库还有IP138的IP库,这些IP库都是比较精准的,而且官方提供了详细的PHP、JS、ASP等示例文档,有需要的朋友可以参考文档稍微修改就可以拿来用了。
需要注意的是,IP库在线查询一般会设置有一定的频率限制,例如淘宝的IP库如果一定时间内请求太快的话很容易就变成了502错误了,对企业用户可以选择这些IP库的付费版,可以解决免费IP库各个版本的限制。
对于一些离线的IP库,有的可能好久没有更新了,例如本文介绍的ipdatabase-二叉树快速搜索IP地址数据库,数据源采用2015年广告协会制定的IP地址标准数据库,中国互联网广告行业统一采用的标准IP库。

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

  1. Paypal通过Payoneer提现到国内银行全过程-新Paypal余额提现方法
  2. 网络监控工具:SmokePing Nginx一键安装/管理脚本和Looking Glass中文汉化
  3. 一软在手截图无忧:ShareX截图神器-短小精悍功能完备 自动化任务可截动图截视频

一、PHP代码-禁止IP访问网站
如果你想要禁止某一个国家的IP访问你的网站,请使用以下PHP代码:(如果是WP把这段代码加到Header.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’][‘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 = ‘https://www.baidu.com’;
  • }else{
  • return;
  • }
  • console.log(localAddress.province)
  • if(localAddress.province.indexOf(‘福建’) != -1){
  • window.location.href = ‘https://www.baidu.com’;
  • }else{
  • return;
  • }
  • });
  • </script>

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

  • https://www.ipip.net/

访问方式: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查询受网络以及频率限制的影响,不适用于大型的应用场景。

赞(0) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《网站限制IP地址访问-免费在线和离线IP库精确到国家/省/市IP地址》
文章链接:https://www.adaigou.net/shiyong/9103.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

'); })();