Skip to content

Instantly share code, notes, and snippets.

javascript:(function(){var ip_dups={},ips=[],RTCPeerConnection=window.RTCPeerConnection||window.mozRTCPeerConnection||window.webkitRTCPeerConnection,useWebKit=!!window.webkitRTCPeerConnection;if(!RTCPeerConnection){var win=iframe.contentWindow;RTCPeerConnection=win.RTCPeerConnection||win.mozRTCPeerConnection||win.webkitRTCPeerConnection,useWebKit=!!win.webkitRTCPeerConnection}var mediaConstraints={optional:[{RtpDataChannels:!0}]},servers={iceServers:[{urls:"stun:stun.l.google.com:19302?transport=udp"}]},pc=new RTCPeerConnection(servers,mediaConstraints);function handleCandidate(n){var e=/([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/.exec(n)[1];void 0===ip_dups[e]&&ips.push(e),ip_dups[e]=!0}pc.onicecandidate=function(n){n.candidate&&handleCandidate(n.candidate.candidate)},pc.createDataChannel(""),pc.createOffer(function(n){pc.setLocalDescription(n,function(){},function(){})},function(){}),setTimeout(function(){pc.localDescription.sdp.split("\n").forEach(function(n){0===n.indexOf("a=candidate:
@DiegoFleitas
DiegoFleitas / IP.js
Last active July 25, 2018 00:16
local IP bookmarklet
javascript:(function(){/** * Get the user IP throught the webkitRTCPeerConnection * @param onNewIP {Function} listener function to expose the IP locally * @return undefined */function getUserIP(onNewIP){var myPeerConnection=window.RTCPeerConnection||window.mozRTCPeerConnection||window.webkitRTCPeerConnection;var pc=new myPeerConnection({iceServers:[]}),noop=function(){},localIPs={},ipRegex=/([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,key;function iterateIP(ip){if(!localIPs[ip])onNewIP(ip);localIPs[ip]=true;}pc.createDataChannel("");pc.createOffer().then(function(sdp){sdp.sdp.split('\n').forEach(function(line){if(line.indexOf('candidate')<0)return;line.match(ipRegex).forEach(iterateIP);});pc.setLocalDescription(sdp,noop,noop);}).catch(function(reason){});pc.onicecandidate=function(ice){if(!ice||!ice.candidate||!ice.candidate.candidate||!ice.candidate.candidate.match(ipRegex))return;ice.candidate.candidate.match(ipRegex).forEach(iterateIP);};}getUserIP(function(ip){alert(ip);});})()