JS获取本机IP地址的方法
Posted 吱夏cz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS获取本机IP地址的方法相关的知识,希望对你有一定的参考价值。
1.获取本机IP地址方法1:
if(typeof window != 'undefined')
var RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
if (RTCPeerConnection) (()=>
var rtc = new RTCPeerConnection()
rtc.createDataChannel(''); //创建一个可以发送任意数据的数据通道
rtc.createOffer( offerDesc => //创建并存储一个sdp数据
rtc.setLocalDescription(offerDesc)
, e => console.log(e))
rtc.onicecandidate =(evt) => //监听candidate事件
if (evt.candidate)
console.log('evt:',evt.candidate)
let ip_rule = /([0-9]1,3(\\.[0-9]1,3)3|[a-f0-9]1,4(:[a-f0-9]1,4)7)/
var ip_addr = ip_rule.exec(evt.candidate.candidate)[1]
console.log('ip_addr:',ip_addr) //打印获取的IP地址
)()
elseconsole.log("没有找到")
2.获取本机IP地址方法2
//获取用户本地ip的方法
const getUserIP= (onNewIP)=>
let MyPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
let pc = new MyPeerConnection(
iceServers: []
);
let noop = () =>
;
let localIPs = ;
let ipRegex = /([0-9]1,3(\\.[0-9]1,3)3|[a-f0-9]1,4(:[a-f0-9]1,4)7)/g;
let iterateIP = (ip) =>
if (!localIPs[ip]) onNewIP(ip);
localIPs[ip] = true;
;
pc.createDataChannel('');
pc.createOffer().then((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((reason) =>
);
pc.onicecandidate = (ice) =>
if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;
ice.candidate.candidate.match(ipRegex).forEach(iterateIP);
;
getUserIP((ip) =>
state.ip=ip
console.log(ip)
console.log(state.ip)
);
如果电脑没获取到,基本上是因为浏览器限制了,解除方法如下:
解决方案:
- 火狐(FireFox) 删除隐藏IP
浏览器输入 about:config
搜索配置 media.peerconnection.enabled 改为false ( 刷新程序,IP正常显示 )
- 谷歌(Chrome) 删除隐藏IP
浏览器输入:chrome://flags/#enable-webrtc-hide-local-ips-with-mdns
把 Anonymize local IPs exposed by WebRTC 设置为 disabled ( 刷新程序,IP正常显示 )
- eage浏览器删除隐藏ip
浏览器输入: edge://flags/#enable-webrtc-hide-local-ips-with-mdns
把 Anonymize local IPs exposed by WebRTC 设置为 disabled ( 刷新程序,IP正常显示 )
node.js获取本机IP地址
想在node中获取本机ip,需要先判断操作系统,可以通过process.platform来判断,MAC下得到的值是darwin,window下得到的值是win32;
然后再利用os模块的networkInterfaces()可以获取所有网卡信息;从其中就可以找到需要的ip;下面是个小例子
function hostIp() { var IPv4; if(process.platform === ‘darwin‘) { for(var i = 0; i < os.networkInterfaces().en0.length; i++) { if(os.networkInterfaces().en0[i].family == ‘IPv4‘) { IPv4 = os.networkInterfaces().en0[i].address; } } } else if(process.platform === ‘win32‘) { for(var i = 0; i < os.networkInterfaces()[‘本地连接‘].length; i++) { if(os.networkInterfaces()[‘本地连接‘][i].family == ‘IPv4‘) { IPv4 = os.networkInterfaces()[‘本地连接‘][i].address; } } } return IPv4; }
当然也可以通过os.type来判断操作系统。MAC下返回的仍然是darwin;而windows 下返回的是window_NT
以上是关于JS获取本机IP地址的方法的主要内容,如果未能解决你的问题,请参考以下文章