Get Local IP of a device in chrome extension
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>
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" ], ...
> 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