前端设置特定IP对网站的访问限制

偶然遇到这样的需求:只设置部分网段IP对当前网站的访问权限
第一眼看到这个需求,我的第一反应是,这必然不是在前端来处理的,前端也处理不了。
随后网上查了一下,还真看到挺多这方面的资料:

1.网上有很多IP查询的入口,这里我们以搜狐入口为例,
2.设置我们可访问的ip列表IPList
3.查询本机IP,若不在IPList内,则强制退出,转至空页面

代码实现如下:

<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
    <script>
        var ip = returnCitySN["cip"];//获取本地IP
        var allowIP = ['213.71.119.91', '213.71.119.92']; //允许访问ip列表
        var flag = false;
        for(var i=0; i<allowIP.length; i++){
            if (ip == allowIP[i]){
                flag = true;
                break;
            }
        }
        if(!flag){
            alert("没有访问权限");
           closewin();
        }
        function closewin() {
            if (navigator.userAgent.indexOf("Firefox") != -1 || navigator.userAgent.indexOf("Chrome") != -1) {
                window.location.href = "about:blank";
                window.close();
            } else {
                window.opener = null;
                window.open("", "_self");
                window.close();
            }
        }
    </script>

备注
这里需要注意,以上方法获取到的IP是公网IP(多人共用一个),一般公司局域网内我们常看到的用的Ip是内网IP(每台机器一个),
我们需要用的也是公网IP

应该也会有一些场景我们会需要用到内网IP,即本地IP,代码如下:

function findIP(callback) {
        var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; //compatibility for firefox and chrome
        var pc = new myPeerConnection({iceServers: []}),
            noop = function() {},
            localIPs = {},
            ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,
            key;

        function ipIterate(ip) {
            if (!localIPs[ip]) callback(ip);
            localIPs[ip] = true;
        }
        pc.createDataChannel("");
        pc.createOffer().then(function(sdp) {
            sdp.sdp.split('\n').forEach(function(line) {
                if (line.indexOf('candidate') < 0) return;
                line.match(ipRegex).forEach(ipIterate);
            });
            pc.setLocalDescription(sdp, noop, noop);
        });
        pc.onicecandidate = function(ice) {
            if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;
            ice.candidate.candidate.match(ipRegex).forEach(ipIterate);
        };
    }

    findIP(function(ip){
        let dom = document.getElementById('dom')
        dom.innerHTML = ip + "你的本地IP地址"
    });

以上,以此记录~
参考地址:
https://www.cnblogs.com/zixian/articles/allow_specify_IP_access.html
https://blog.csdn.net/aminwangaa/article/details/91879057

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值