-
-
Save hectorguo/672844c319547498dcb569df583f959d to your computer and use it in GitHub Desktop.
/** | |
* Get Local IP Address | |
* | |
* @returns Promise Object | |
* | |
* getLocalIP().then((ipAddr) => { | |
* console.log(ipAddr); // 192.168.0.122 | |
* }); | |
*/ | |
function getLocalIP() { | |
return new Promise(function(resolve, reject) { | |
// NOTE: window.RTCPeerConnection is "not a constructor" in FF22/23 | |
var RTCPeerConnection = /*window.RTCPeerConnection ||*/ window.webkitRTCPeerConnection || window.mozRTCPeerConnection; | |
if (!RTCPeerConnection) { | |
reject('Your browser does not support this API'); | |
} | |
var rtc = new RTCPeerConnection({iceServers:[]}); | |
var addrs = {}; | |
addrs["0.0.0.0"] = false; | |
function grepSDP(sdp) { | |
var hosts = []; | |
var finalIP = ''; | |
sdp.split('\r\n').forEach(function (line) { // c.f. http://tools.ietf.org/html/rfc4566#page-39 | |
if (~line.indexOf("a=candidate")) { // http://tools.ietf.org/html/rfc4566#section-5.13 | |
var parts = line.split(' '), // http://tools.ietf.org/html/rfc5245#section-15.1 | |
addr = parts[4], | |
type = parts[7]; | |
if (type === 'host') { | |
finalIP = addr; | |
} | |
} else if (~line.indexOf("c=")) { // http://tools.ietf.org/html/rfc4566#section-5.7 | |
var parts = line.split(' '), | |
addr = parts[2]; | |
finalIP = addr; | |
} | |
}); | |
return finalIP; | |
} | |
if (1 || window.mozRTCPeerConnection) { // FF [and now Chrome!] needs a channel/stream to proceed | |
rtc.createDataChannel('', {reliable:false}); | |
}; | |
rtc.onicecandidate = function (evt) { | |
// convert the candidate to SDP so we can run it through our general parser | |
// see https://twitter.com/lancestout/status/525796175425720320 for details | |
if (evt.candidate) { | |
var addr = grepSDP("a="+evt.candidate.candidate); | |
resolve(addr); | |
} | |
}; | |
rtc.createOffer(function (offerDesc) { | |
rtc.setLocalDescription(offerDesc); | |
}, function (e) { console.warn("offer failed", e); }); | |
}); | |
} |
In Chrome it is necessary to disable webrtc.
chrome://flags/#enable-webrtc-hide-local-ips-with-mdns
I haven't tested it on other browser.
On the latest version of Chrome version 86 cannot find this chrome://flags/#enable-webrtc-hide-local-ips-with-mdns. Any alternative solution?
I am getting ipv6 address. Not ipv4. How can I get ipv4 address?
@krisnadwia can you please share you are code. im not getting result like you.
@krisnadwia can you please share you are code. im not getting result like you.
Hi @indhunathan, I will explain it.
First of all, you have to turn off/disable webrtc in Chrome. Copy this link and paste it in your Chrome address -> "chrome://flags/#enable-webrtc-hide-local-ips-with-mdns", then select "disabled".
Then, you just need to follow the code above and give it a try. I tried it in inspect.
It can also be implemented into a project like this.
I hope you understand with my explanation.
Did anyone found an alternative workaround to fetch client ip.?