通过webRTC 获取内网IP

一,首先一个获取当前客户端的IP地址的网址:http://net.ipcalf.com/ 显示的是一段机器码

Your network IP is:
fff83651-0b2a-4213-9d4a-18a9e88572c4.local
Make the locals proud.

二,Chrome和Firefox浏览器会默认隐藏内网的IP地址,所以需要设置一些额外的东西才可以将IP地址显示出来
Chrome:在Chrome浏览器地址栏中输入:chrome://flags/
搜索#enable-webrtc-hide-local-ips-with-mdns 该配置 并将属性改为 disabled
之后按照chrome的指示重启一下IP地址就正常了。
但是chrome更新到86版本之后就找不到#enable-webrtc-hide-local-ips-with-mdns 这个配置项了,

三,替代的解决方案是安装一个WebRTC Network Limiter插件,然后选择第二项,这样的话本地ip地址就又能正常的显示出来了

image.png

刷新页面


image.png

js脚本



<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<title>JavaScript获取客户端IP[利用新浪接口]</title>

</head>

<body>
<script>
    

//创建RTCPeerConnection接口
let conn = new RTCPeerConnection({
        iceServers: []
    }) 
let noop = function(){}
conn.onicecandidate = function(ice){
    if (ice.candidate){
        //使用正则获取ip
        let ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/
        let ip_addr = ip_regex.exec(ice.candidate.candidate)[1];
        console.log(ip_addr);
        conn.onicecandidate = noop
    }
}
//随便创建一个叫狗的通道(channel)
conn.createDataChannel('dog')
//创建一个SDP协议请求
conn.createOffer(conn.setLocalDescription.bind(conn),noop)


</script>




</body>

</html>


推荐阅读更多精彩内容