工具_01_一键查看本机内网和外网IP

工具 返回到 『工具』

在线演示地址:

vwhm.net/tools/ip.html


查看外网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