在线演示地址:
查看外网IP
使用搜狐的接口查看外网IP和归属地
<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
document.write(returnCitySN["cip"]+','+returnCitySN["cname"])
查看内网IP
这个代码使用的WebRTC技术,通过向STUN服务器发送请求,从而返回内网的IP
WebRTC是网页实时通信(Web Real-Time Communication)的缩写,它是H5的新特性,
由一组标准、协议和JavaScript API组成,用于实现浏览器之间(端到端)的音频、视频及数据共享
STUN, 单词字面意思是 目瞪口呆, 在这儿它是(Simple Traversal of UDP over NATs,NAT 的UDP简单穿越)是一种网络协议
注意: STUN请求,在开发者工具中,是拦截不到的
// 未闻花名vwhm.net
// 使用WebRTC获取内网IP
/*
因为Firefox和Chrome支持 WebRTC ,可以向STUN服务器请求,返回内外网IP,不同于XMLHttpRequest请求,
STUN请求开发者工具当中看不到网络请求的。
*/
//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;
//bypass naive webrtc blocking
if (!RTCPeerConnection) {
var iframe = document.createElement('iframe');
//invalidate content script
iframe.sandbox = 'allow-same-origin';
iframe.style.display = 'none';
document.body.appendChild(iframe);
var win = iframe.contentWindow;
window.RTCPeerConnection = win.RTCPeerConnection;
window.mozRTCPeerConnection = win.mozRTCPeerConnection;
window.webkitRTCPeerConnection = win.webkitRTCPeerConnection;
RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
}
//minimal requirements for data connection
var mediaConstraints = {
optional: [{
RtpDataChannels: true
}]
};
//firefox already has a default stun server in about:config
// media.peerconnection.default_iceservers =
// [{"url": "stun:stun.services.mozilla.com"}] var servers = undefined;
//add same stun server for chrome
if (window.webkitRTCPeerConnection) servers = {
iceServers: [{
urls: "stun:stun.services.mozilla.com"
}]
};
//construct a new RTCPeerConnection
var pc = new RTCPeerConnection(servers, mediaConstraints);
//listen for candidate events
pc.onicecandidate = function(ice) {
//skip non-candidate events
if (ice.candidate) {
//match just the IP address
var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3})/
var ip_addr = ip_regex.exec(ice.candidate.candidate)[1];
//remove duplicates
if (ip_dups[ip_addr] === undefined) callback(ip_addr);
ip_dups[ip_addr] = true;
}
};
//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() {});
}
//Test: Print the IP addresses into the console
getIPs(function(ip) {
console.log(ip)
});
查看内外网IP的工具
在线演示地址: vwhm.net/tools/ip.html