[英]How can we check our IP Address without making any connection to server?
I know connection required for getting information from server. 我知道从服务器获取信息所需的连接。 and through webRTC stun ping help us to check out local & private ip addresses. 并通过webRTC击晕帮助我们检查本地和私有IP地址。
Is there any way to get ip address with server ping or stun request? 有什么办法可以通过服务器ping或stun请求获取IP地址?
JavaScript code to get 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);});
The HTTP headers in a request will have source ip in it. 请求中的HTTP标头中将包含源ip。 And the system who received the requests, in your case the ipinfo.io, can check for this and send back the IP of the caller easily. 接收到请求的系统(在您的情况下为ipinfo.io)可以检查并轻松发回呼叫者的IP。
But, it seems ipinfo.io is only detecting your outbound server's ip address. 但是,似乎ipinfo.io仅检测出站服务器的IP地址。 That is, if you are behind a LAN or a Proxy Server, ipinfo.io detects only that IP address not your actual system's ip. 也就是说,如果您位于LAN或代理服务器后面,则ipinfo.io仅检测该IP地址,而不检测您实际系统的ip。 For this, HTTP header X-Forwarded-For
is to be used. 为此,将使用HTTP标头X-Forwarded-For
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.