如何使用JavaScript获取本地/内部IP

Pas*_*zyk 10 javascript ip network-programming webrtc

如何使用WebRTC获取本地客户端IP .

我不需要REMOTE_ADDR客户端,而是他的本地网络IP.我之前在网站上看过这个sharedrop.com,它使用WebRTC识别同一网络中的计算机.

在PHP中,我这样做是为了让客户端远程IP:

<?php
  echo $_SERVER["REMOTE_ADDR"]; // which would return 72.72.72.175
?>
Run Code Online (Sandbox Code Playgroud)

我查看了stackoverflow,但每个问题都是使用远程地址解决的.

如何使用JavaScript而不是远程地址获取本地IP(例如192.168.1.24).

mid*_*ido 23

我从哪里获取代码 - > 来源

您可以在 - > Demo中找到演示

我修改了源代码,减少了行数,没有发出任何眩晕请求,因为你只想要本地IP而不是公共IP,下面的代码适用于最新的Firefox和Chrome:

    window.RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;   //compatibility for firefox and chrome
    var pc = new RTCPeerConnection({iceServers:[]}), noop = function(){};      
    pc.createDataChannel("");    //create a bogus data channel
    pc.createOffer(pc.setLocalDescription.bind(pc), noop);    // create offer and set local description
    pc.onicecandidate = function(ice){  //listen for candidate events
        if(!ice || !ice.candidate || !ice.candidate.candidate)  return;
        var myIP = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/.exec(ice.candidate.candidate)[1];
        console.log('my IP: ', myIP);   
        pc.onicecandidate = noop;
    };
Run Code Online (Sandbox Code Playgroud)

这里发生的是,我们正在创建一个虚拟对等连接,并且为了让远程对等方联系我们,我们通常会互相交换冰候选者.阅读冰糖,我们可以告诉用户的IP.

  • 这实际上具有安全隐患,因为这允许攻击者找出当前用户的内部IP地址 (4认同)
  • 完成此操作后,缺少丢失的清除代码来关闭此连接。一遍又一遍地调用它会最终抛出 (2认同)
  • Chrome 将 WebRTC 默认更改为 mDNS 并破坏了内联网。/sf/ask/3972902321/ (2认同)