Get Local IP of a device in chrome extension

前端 未结 4 717
半阙折子戏
半阙折子戏 2020-12-24 03:21

I am working on a chrome extension which is supposed to discover and then communicate with other devices in a local network. To discover them it needs to find out its own IP

相关标签:
4条回答
  • 2020-12-24 03:36

    After some searching I've found that similar question was answered before. This API is inaccessible from extension, but available for chrome apps:

    use chrome.system.network.getNetworkInterfaces.

    This will return an array of all interfaces with their IP address.

    This is my sample code:

    chrome.system.network.getNetworkInterfaces(function(interfaces){ console.log(interfaces); });

    manifest-permissions:

    "permissions": [ "system.network" ], ...

    0 讨论(0)
  • 2020-12-24 03:43

    see http://developer.chrome.com/extensions/webRequest.html for detail, my code example:

    // get IP using webRequest
    var currentIPList = {};
    chrome.webRequest.onCompleted.addListener(
      function(info) {
        currentIPList[info.url] = info.ip;
        currentIPList[info.tabId] = currentIPList[info.tabId] || [];
        currentIPList[info.tabId].push(info);
        return;
      },
      {
        urls: [],
        types: []
      },
      []
    );
    
    0 讨论(0)
  • 2020-12-24 03:48

    You can get a list of your local IP addresses (more precisely: The IP addresses of your local network interfaces) via the WebRTC API. This API can be used by any web application (not just Chrome extensions).

    Example:

    // Example (using the function below).
    getLocalIPs(function(ips) { // <!-- ips is an array of local IP addresses.
        document.body.textContent = 'Local IP addresses:\n ' + ips.join('\n ');
    });
    
    function getLocalIPs(callback) {
        var ips = [];
    
        var RTCPeerConnection = window.RTCPeerConnection ||
            window.webkitRTCPeerConnection || window.mozRTCPeerConnection;
    
        var pc = new RTCPeerConnection({
            // Don't specify any stun/turn servers, otherwise you will
            // also find your public IP addresses.
            iceServers: []
        });
        // Add a media line, this is needed to activate candidate gathering.
        pc.createDataChannel('');
        
        // onicecandidate is triggered whenever a candidate has been found.
        pc.onicecandidate = function(e) {
            if (!e.candidate) { // Candidate gathering completed.
                pc.close();
                callback(ips);
                return;
            }
            var ip = /^candidate:.+ (\S+) \d+ typ/.exec(e.candidate.candidate)[1];
            if (ips.indexOf(ip) == -1) // avoid duplicate entries (tcp/udp)
                ips.push(ip);
        };
        pc.createOffer(function(sdp) {
            pc.setLocalDescription(sdp);
        }, function onerror() {});
    }
    <body style="white-space:pre"> IP addresses will be printed here... </body>

    0 讨论(0)
  • 2020-12-24 03:53
    > chrome.system.network.getNetworkInterfaces(function(interfaces){
    >       console.log(interfaces);    }); 
    

    manifest-permissions:

    "permissions": [ "system.network" ], ...

    Works for me too and it replies:

    (4) [{…}, {…}, {…}, {…}]
    

    0 : {address: "xxxx", name: "en0", prefixLength: 64}

    1 : {address: "192.168.86.100", name: "en0", prefixLength: 24}

    2 : {address: "xxxx", name: "awdl0", prefixLength: 64}

    3 : {address: "xxxx", name: "utun0", prefixLength: 64}

    length : 4

    0 讨论(0)
提交回复
热议问题