我们如何在不与服务器建立任何连接的情况下检查我们的 IP 地址
How can we check our IP Address without making any connection to server?
我知道从服务器获取信息需要连接。并通过webRTC眩晕ping帮助我们检查本地和私有IP地址。
有没有办法通过服务器ping或震撼请求获取IP地址?
JavaScript 代码来获取 Ip
//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);});
请求中的 HTTP 标头将包含源 ip。收到请求的系统(在您的情况下是 ipinfo.io)可以检查这一点并轻松发回呼叫者的 IP。
但是,似乎 ipinfo.io 只检测出站服务器的 IP 地址。也就是说,如果您位于 LAN 或代理服务器后面,ipinfo.io 仅检测该 IP 地址,而不是实际系统的 IP。为此,将使用 HTTP 标头X-Forwarded-For
。
相关文章:
- 我们如何在不更改url的情况下使用锚点点击从一个页面重定向到另一个页面
- 在什么情况下我们需要在javsacript中实现单例类
- 我们可以在不将其加载到无限可滚动网页中的情况下访问 DOM 元素吗?
- 我们如何在错误的资源请求的情况下使用 XMLHttpRequest 函数处理程序
- 在什么情况下我们不应该在javascript中使用php
- 我们可以在不使用alert或windows.alert的情况下弹出窗口吗
- 我们可以在不编写filteredMessages函数的情况下获得相同的功能
- 为什么不'在某些情况下,我们需要在JavaScript函数定义周围多加一对括号
- 我们可以在不使用“关闭”的情况下捕获相同的浏览器关闭事件吗;onunload”;
- 我们如何在不引用XHTML页面中的函数的情况下运行JavaScript的初始片段?
- 为什么我们可以't在没有新运算符的情况下调用Date()类的方法
- 我们可以在禁用渲染的情况下运行JavaScript吗
- 我们如何在不使用硒的情况下从Java代码点击网页
- 我们如何在没有jQuery的情况下使用Javascript创建carousel图像滑块
- 在id包含固定字符串的情况下,我们可以使用Ext.ComponentQuery.query吗?
- 我们可以在没有表单的情况下使用角度输入验证吗
- Javascript:我们如何在不使用任何第三方的情况下获得内部IP地址
- 对于量角器测试,我们可以在没有 browser.wait() 函数的情况下获得 waitElement 对象值吗?
- 如何在没有同源政策的情况下将谷歌结果放入我们的网页
- 我们如何在不与服务器建立任何连接的情况下检查我们的 IP 地址