js获取客户端内网ip_外网获取到内网ip了

js获取客户端内网ip_外网获取到内网ip了再做项目中获取客户端ip,因为是公司内部使用,用的都是同一个公网账号,获取的都是外网ip,造成ip都是一个。通过java代码暂时没有发现可以实现的。后来上网百度,发现了一段js可以实现获取内网ip<!DOCTYPEhtml><html><head><metahttp-equiv="Content-Type"cont…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

再做项目中获取客户端ip,因为是公司内部使用,用的都是同一个公网账号,获取的都是外网ip,造成ip都是一个。通过java代码暂时没有发现可以实现的。后来上网百度,发现了一段js可以实现获取内网ip

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    </head>
    <body>
        <h4>
            Demo for:
            <a href="https://github.com/diafygi/webrtc-ips">
                https://github.com/diafygi/webrtc-ips
            </a>
        </h4>
        <p>
            This demo secretly makes requests to STUN servers that can log your
            request. These requests do not show up in developer consoles and
            cannot be blocked by browser plugins (AdBlock, Ghostery, etc.).
        </p>
        <h4>Your local IP addresses:</h4>
        <ul></ul>
        <h4>Your public IP addresses:</h4>
        <ul></ul>
        <script>
            //get the IP addresses associated with an account
            function getIPs(callback){
                var ip_dups = {};
                //compatibility for firefox and chrome
                var RTCPeerConnection = window.RTCPeerConnection
                    || window.mozRTCPeerConnection
                    || window.webkitRTCPeerConnection;
                var useWebKit = !!window.webkitRTCPeerConnection;
                //bypass naive webrtc blocking
                if(!RTCPeerConnection){
                    //create an iframe node
                    var iframe = document.createElement('iframe');
                    iframe.style.display = 'none';
                    //invalidate content script
                    iframe.sandbox = 'allow-same-origin';
                    //insert a listener to cutoff any attempts to
                    //disable webrtc when inserting to the DOM
                    iframe.addEventListener("DOMNodeInserted", function(e){
                        e.stopPropagation();
                    }, false);
                    iframe.addEventListener("DOMNodeInsertedIntoDocument", function(e){
                        e.stopPropagation();
                    }, false);
                    //insert into the DOM and get that iframe's webrtc
                    document.body.appendChild(iframe);
                    var win = iframe.contentWindow;
                    RTCPeerConnection = win.RTCPeerConnection
                        || win.mozRTCPeerConnection
                        || win.webkitRTCPeerConnection;
                    useWebKit = !!win.webkitRTCPeerConnection;
                }
                //minimal requirements for data connection
                var mediaConstraints = {
                    optional: [{RtpDataChannels: true}]
                };
                //firefox already has a default stun server in about:config
                //    media.peerconnection.default_iceservers =
                //    [{"url": "stun:stun.services.mozilla.com"}]
                var servers = undefined;
                //add same stun server for chrome
                if(useWebKit)
                    servers = {iceServers: [{urls: "stun:stun.services.mozilla.com"}]};
                //construct a new RTCPeerConnection
                var pc = new RTCPeerConnection(servers, mediaConstraints);
                function handleCandidate(candidate){
                    //match just the IP address
                    var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3})/
                    var ip_addr = ip_regex.exec(candidate)[1];
                    //remove duplicates
                    if(ip_dups[ip_addr] === undefined)
                        callback(ip_addr);
                    ip_dups[ip_addr] = true;
                }
                //listen for candidate events
                pc.onicecandidate = function(ice){
                    //skip non-candidate events
                    if(ice.candidate)
                        handleCandidate(ice.candidate.candidate);
                };
                //create a bogus data channel
                pc.createDataChannel("");
                //create an offer sdp
                pc.createOffer(function(result){
                    //trigger the stun server request
                    pc.setLocalDescription(result, function(){}, function(){});
                }, function(){});
                //wait for a while to let everything done
                setTimeout(function(){
                    //read candidate info from local description
                    var lines = pc.localDescription.sdp.split('\n');
                    lines.forEach(function(line){
                        if(line.indexOf('a=candidate:') === 0)
                            handleCandidate(line);
                    });
                }, 1000);
            }
            //insert IP addresses into the page
            getIPs(function(ip){
                var li = document.createElement("li");
                li.textContent = ip;
                //local IPs
                if (ip.match(/^(192\.168\.|169\.254\.|10\.|172\.(1[6-9]|2\d|3[01]))/))
                    document.getElementsByTagName("ul")[0].appendChild(li);
                //assume the rest are public IPs
                else
                    document.getElementsByTagName("ul")[1].appendChild(li);
            });
        </script>
    </body>
</html>

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/193922.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • visio 2003密钥

    visio 2003密钥序列号:GWH28-DGCMP-P6RC4-6J4MT-3HFDY序列号:WFDWY-XQXJF-RHRYG-BG7RQ-BBDHM

  • OutputStreamWriter的基本使用[通俗易懂]

    OutputStreamWriter的基本使用[通俗易懂]所有基于Writer类和Reader类的IO流都是字符流,字符流是高级流,必须基于字节流来构建OutputStreamWriter主要方法write(intn)write(Stringstr)write(Stringstr,intoffset,intlen)write(char[]cbuf)write(char[]cbuf,intoffset,intlen)举个栗子packagecom.wondream.myframework.app.basic

  • 面试题总结 —— JAVA高级工程师[通俗易懂]

    面试题总结 —— JAVA高级工程师[通俗易懂]面试题总结——JAVA高级工程师近期考虑换工作的问题,于是投简历面试,面试5家公司的高级Java工程师,有4家给了我offer,想着总结一下面试经验,方便最近正在寻求机会的你们一、无笔试题不知道是不是职位原因还是没遇到,面试时,都不需要做笔试题,而是填张个人信息表格,或者直接面试二、三大框架方面问题1、Spring事务的隔离性,并说说每个隔离性的…

  • 手机和电脑将XPS转换成PDF的免费方法

    手机和电脑将XPS转换成PDF的免费方法如何将XPS转成PDF?最近有小伙伴收到很多后缀为XPS的文件,不知道如何打开,更不懂怎么样使用,如果能转成常用的PDF格式就好了。打开XPS文件最简单的方法当然还是安装对应的阅读器,比如XPSViewer;除此之外其实很多PDF阅读器也是可以直接打开XPS文档的,比如极速PDF阅读器。用以上任意一种方式打开XPS文件后,利用PDF生成的其中方式之一,将文件进行打印并选择PDF虚拟打印机就能直接将XPS文件以PDF格式进行保存了。这种方式一般适用于电脑端,毕竟手机无法进行这种虚拟打印机的操作。但如

  • 什么是IT人力外包?什么情况下选用IT人力外包?

    什么是IT人力外包?什么情况下选用IT人力外包?什么是IT人力外包?什么情况下选用IT人力外包?在IT企业中,在工作中通常涉及的外包业务主要有三类形式,概括来说:(一)项目外包:有明确的项目目标、时间要求、产出交付标准,请有相关资质的乙方公司帮助完成,付费方式通常为按约定的项目阶段、达成的交付产出分期支付,最后在项目上线运行后可能还会留少量比例的尾款,确保项目上线后还能得到乙方的继续支持。(二)业务外包:对于一些例行、重复的工作,明…

  • 计算机浮点表示法 教案,计算机组成原理——浮点数表示方法(示例代码)

    计算机浮点表示法 教案,计算机组成原理——浮点数表示方法(示例代码)简介这篇文章主要介绍了计算机组成原理——浮点数表示方法(示例代码)以及相关的经验技巧,文章约568字,浏览量241,点赞数7,值得推荐!为了表示浮点数,数被分为两部分:整数部分和小数部分。例如,浮点数14.234就有整数部分14和小数部分0.234.首先把浮点数转换成二进制数,步骤如下:1把整数部分转换成二进制.2把小数部分转换成二进制.3在两部分之间加上小数点.浮点数还可以规范化,浮点数可以用单…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号