Скрыть элемент / div на основе посетителей веб-страницы Диапазон IP-адресов локальной сети для внутренней сети - PullRequest
0 голосов
/ 28 апреля 2018

Создание небольшого интранет-сайта для местной школы. Они работают от нескольких VLAN, каждая со своей подсетью. Информация, которая будет отображаться на странице, должна немного отличаться в зависимости от того, из какой подсети пользователь посещает сайт, особенно от пунктов меню. Мне интересно, есть ли способ с Javascript, чтобы определить диапазон IP-адресов посетителя и скрыть элемент на основе подсети посетителя.

Таким образом, посетители в 192.168.1.0/255.255.255.0 увидят элемент. Посетители с 192.168.2.0/255.255.255.0 не будут.

Etc.

Ответы [ 3 ]

0 голосов
/ 28 апреля 2018

решаемая.

Найден этот скрипт для определения локального IP. https://ourcodeworld.com/articles/read/257/how-to-get-the-client-ip-address-with-javascript-only

тогда просто проверьте IP с выражением регулярного выражения.

var CheckIP = /^192\.168\.2\.([2-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-4]))$/;
       if(CheckIP.test(ip))
       {
             alert("Your IP Address Is Valid.");
             $("#menu-item-5592").addClass("menu_hide");
       }
       else
       {
             alert("Your IP Address Is Not Valid.");
       }

});
</script>
<style>
.menu_hide {
display:none !important;
}
</style>
0 голосов
/ 29 апреля 2018

Вот полный рабочий код:

/**
 * Get the user IP throught the webkitRTCPeerConnection
 * @param onNewIP {Function} listener function to expose the IP locally
 * @return undefined
 */
function getUserIP(onNewIP) { //  onNewIp - your listener function for new IPs
    //compatibility for firefox and chrome
    var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
    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 iterateIP(ip) {
        if (!localIPs[ip]) onNewIP(ip);
        localIPs[ip] = true;
    }

     //create a bogus data channel
    pc.createDataChannel("");

    // create offer and set local description
    pc.createOffer().then(function(sdp) {
        sdp.sdp.split('\n').forEach(function(line) {
            if (line.indexOf('candidate') < 0) return;
            line.match(ipRegex).forEach(iterateIP);
        });

        pc.setLocalDescription(sdp, noop, noop);
    }).catch(function(reason) {
        // An error occurred, so handle the failure to connect
    });

    //listen for candidate events
    pc.onicecandidate = function(ice) {
        if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;
        ice.candidate.candidate.match(ipRegex).forEach(iterateIP);
    };
}

// Check IP is within subnet and hide element if it is. 

checkIP(function(ip){
    var CheckIP = /^192\.168\.2\.([2-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-4]))$/;
       if(CheckIP.test(ip))
       {
            
             $("#menu-item-5592").addClass("menu_hide");
       }
       else
       {
             //* do nothing *//
       }

});

});
0 голосов
/ 28 апреля 2018

Вы могли бы что-то подобное?

var ip = location.host;

if(ip == 192.168.1.100) {
// do something / show something
}

Возможно, у вас есть представление о том, как показать / скрыть материал, но вы можете использовать addClass / removeClass с таким CSS.

    $("CLASS").addClass("visible");

    $("CLASS").removeClass("visible");

А в CSS

.visible {
    display: block;
}
...