Created
September 26, 2016 10:37
-
-
Save andrijeski/0e408d34d2846d0f026c34d5b2ae768f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<body> | |
<head><script src="ipcheck.js"></script></head> | |
<body> | |
Your network IP is: <h1 id=list>-</h1> | |
</body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// NOTE: window.RTCPeerConnection is "not a constructor" in FF22/23 | |
var RTCPeerConnection = /*window.RTCPeerConnection ||*/ window.webkitRTCPeerConnection || window.mozRTCPeerConnection; | |
if (RTCPeerConnection) (function () { | |
var rtc = new RTCPeerConnection({iceServers:[]}); | |
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) grepSDP("a="+evt.candidate.candidate); | |
}; | |
rtc.createOffer(function (offerDesc) { | |
grepSDP(offerDesc.sdp); | |
rtc.setLocalDescription(offerDesc); | |
}, function (e) { console.warn("offer failed", e); }); | |
var addrs = Object.create(null); | |
addrs["0.0.0.0"] = false; | |
function updateDisplay(newAddr) { | |
if (newAddr in addrs) return; | |
else addrs[newAddr] = true; | |
var displayAddrs = Object.keys(addrs).filter(function (k) { return addrs[k]; }); | |
document.getElementById('list').textContent = displayAddrs.join(" or perhaps ") || "n/a"; | |
} | |
function grepSDP(sdp) { | |
var hosts = []; | |
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') updateDisplay(addr); | |
} else if (~line.indexOf("c=")) { // http://tools.ietf.org/html/rfc4566#section-5.7 | |
var parts = line.split(' '), | |
addr = parts[2]; | |
updateDisplay(addr); | |
} | |
}); | |
} | |
})(); else { | |
document.getElementById('list').nextSibling.textContent = "In Chrome and Firefox your IP should display automatically."; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment