原生javascript方式获取用户的IP地址
Native javascript way to get user's IP address
如果没有外部服务或服务器端代码,似乎不可能用纯javascript获得您的IP地址。
我的问题是:为什么语言本身没有实现这个特性?毕竟,浏览器应该知道它的IP地址。
实际上可以使用普通JavaScript 用户的IP地址。WebRTC有一个安全漏洞,可以获取用户的外部甚至内部 (LAN) IP地址。
看看这个GitHub项目:https://github.com/diafygi/webrtc-ips
//get the IP addresses associated with an account
function getIPs(callback){
var ip_dups = {};
//compatibility for firefox and chrome
var RTCPeerConnection = window.RTCPeerConnection
|| window.mozRTCPeerConnection
|| window.webkitRTCPeerConnection;
var useWebKit = !!window.webkitRTCPeerConnection;
//bypass naive webrtc blocking using an iframe
if(!RTCPeerConnection){
//NOTE: you need to have an iframe in the page right above the script tag
//
//<iframe id="iframe" sandbox="allow-same-origin" style="display: none"></iframe>
//<script>...getIPs called in here...
//
var win = iframe.contentWindow;
RTCPeerConnection = win.RTCPeerConnection
|| win.mozRTCPeerConnection
|| win.webkitRTCPeerConnection;
useWebKit = !!win.webkitRTCPeerConnection;
}
//minimal requirements for data connection
var mediaConstraints = {
optional: [{RtpDataChannels: true}]
};
var servers = {iceServers: [{urls: "stun:stun.services.mozilla.com"}]};
//construct a new RTCPeerConnection
var pc = new RTCPeerConnection(servers, mediaConstraints);
function handleCandidate(candidate){
//match just the IP address
var ip_regex = /([0-9]{1,3}('.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/
var ip_addr = ip_regex.exec(candidate)[1];
//remove duplicates
if(ip_dups[ip_addr] === undefined)
callback(ip_addr);
ip_dups[ip_addr] = true;
}
//listen for candidate events
pc.onicecandidate = function(ice){
//skip non-candidate events
if(ice.candidate)
handleCandidate(ice.candidate.candidate);
};
//create a bogus data channel
pc.createDataChannel("");
//create an offer sdp
pc.createOffer(function(result){
//trigger the stun server request
pc.setLocalDescription(result, function(){}, function(){});
}, function(){});
//wait for a while to let everything done
setTimeout(function(){
//read candidate info from local description
var lines = pc.localDescription.sdp.split(''n');
lines.forEach(function(line){
if(line.indexOf('a=candidate:') === 0)
handleCandidate(line);
});
}, 1000);
}
//Test: Print the IP addresses into the console
getIPs(function(ip){console.log(ip);});
查看演示:https://diafygi.github.io/webrtc-ips/
相关文章:
- 跟踪用户点击Adsense广告的IP地址
- 用于更改IP地址的输入框
- 获取docker容器中运行的节点应用程序的IP地址
- 如何从ipify函数返回ip地址,以便在其他函数中使用
- 使用网络服务器的IP地址而不是域名对其进行屏幕抓取
- 除了用于跟踪的IP地址之外,是否有任何计算机特定信息
- 使用 IP 地址和超链接对数据表进行排序
- 如果通过域名或IP地址导航到,则进行检测
- 如何在nodejs中将主机名解析为ip地址
- 如何使用javascript确定登录用户的浏览器版本和IP地址
- 我怎样才能重写这个函数,这样我就不会'不必显式地键入范围内的每个IP地址
- 获取客户端机器's使用Asp/Javascript的精确IP地址(非公共IP)
- Linkedin开发者:[未经授权].IP地址不匹配
- 为什么可以't我得到连接客户端's的ip地址在我的服务器上运行Node.js+Openshift托管的W
- 我能得到访问我网站的当地公共ip地址吗
- 覆盖批处理IP地址以查找位置
- Asp.NetMVC 3:使用Javascript的客户端IP地址
- 使用Safari浏览器的Javascript的局域网本地IP地址
- 基于IP地址重定向
- 如何从Adobe Interactive表单中获取客户端机器的IP地址