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地址的方法的主要内容,如果未能解决你的问题,请参考以下文章

JS获取本机IP地址的方法(附上解决浏览器无法获取IP的方法)

JS获取本机IP地址的方法

用javaScript怎么样获取用户本地的ip地址?

js获取本机的网络IP地址

node.js获取本机IP地址

记一次前端ip水印