Skip to content

Instantly share code, notes, and snippets.

@laneme
Last active March 20, 2019 00:41
Show Gist options
  • Save laneme/560ad32bc2f2405fde3aa5d1b86a1d62 to your computer and use it in GitHub Desktop.
Save laneme/560ad32bc2f2405fde3aa5d1b86a1d62 to your computer and use it in GitHub Desktop.
function getLocalIP() {
document.body.insertAdjacentHTML("beforeend", `<iframe id="dummy-frame" sandbox="allow-same-origin" style="display: none"></iframe>`)
let noop = () => {},
IP = ""
let RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection
if (!RTCPeerConnection) {
let crrWin = iframe.currentWindow
RTCPeerConnection = crrWin.RTCPeerConnection || crrWin.mozRTCPeerConnection || crrWin.webkitRTCPeerConnection
if (!RTCPeerConnection) return ""
}
// let servers = { iceServers: [{urls: "stun:stun.services.mozilla.com", sdpSemantics:'plan-b'}] }
let servers = {
iceServers: []
}
let mediaConstraints = {
optional: [{
RtpDataChannels: true
}]
}
try {
let conn = new RTCPeerConnection(servers, mediaConstraints)
conn.createOffer(conn.setLocalDescription.bind(conn), noop, {
mandatory: {
OfferToReceiveAudio: true
}
});
conn.createDataChannel("")
} catch (err) {
console.error("Couldn't Establish RTCPeerConnection ", err)
return ""
}
return new Promise((resolve, reject) => {
conn.onicecandidate = ice => {
if (ice || ice.candidate || ice.candidate.candidate) {
let ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/
IP = ip_regex.exec(ice.candidate.candidate)[1]
conn.onicecandidate = noop
conn.close()
resolve(IP)
} else resolve()
}
})
}
document.onreadystatechange = () => {
if (document.readyState == 'complete') getLocalIP().then(data => { console.log(data) })
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment