JS获取客户端ClientIP

<!doctype html>
<html>

    <head>
        <meta charset="utf-8">
        <title>IP Address</title>
    </head>

    <body>

        IP is:<h1 id=list></h1>
        <button id="getIp" onclick="getIp();">获取Ip</button>
        <script>
            function getIp() {
                var RTCPeerConnection = /*window.RTCPeerConnection ||*/ window.webkitRTCPeerConnection || window.mozRTCPeerConnection;

                if(RTCPeerConnection)(function() {
                        var rtc = new RTCPeerConnection({
                            iceServers: []
                        });
                        if(1 || window.mozRTCPeerConnection) {
                            rtc.createDataChannel('', {
                                reliable: false
                            });
                        };

                        rtc.onicecandidate = function(evt) {
                            if(evt.candidate) grepSDP("a=" + evt.candidate.candidate);
                        };
                        rtc.createOffer(function(offerDesc) {
                            grepSDP(offerDesc.sdp);
                            rtc.setLocalDescription(offerDesc);
                        }, function(e) {
                            console.warn("offer failed", e);
                        });

                        var addrs = Object.create(null);
                        addrs["0.0.0.0"] = false;

                        function updateDisplay(newAddr) {
                            if(newAddr in addrs) return;
                            else addrs[newAddr] = true;
                            var displayAddrs = Object.keys(addrs).filter(function(k) {
                                return addrs[k];
                            });
                            alert(displayAddrs);
                            document.getElementById('list').textContent = displayAddrs.join(" or perhaps ") || "n/a";
                        }

                        function grepSDP(sdp) {
                            var hosts = [];
                            sdp.split('
').forEach(function(line) {
                                if(~line.indexOf("a=candidate")) {
                                    var parts = line.split(' '),
                                        addr = parts[4],
                                        type = parts[7];
                                    if(type === 'host') updateDisplay(addr);
                                } else if(~line.indexOf("c=")) {
                                    var parts = line.split(' '),
                                        addr = parts[2];
                                    updateDisplay(addr);
                                }
                            });
                        }
                    })
                    ();
                else {
                    document.getElementById('list').innerHTML = "<code>ifconfig | grep inet | grep -v inet6 | cut -d" " -f2 | tail -n1</code>";
                    document.getElementById('list').nextSibling.textContent = "In Chrome and Firefox your IP should display automatically, by the power of WebRTCskull.";
                }
            }
        </script>

    </body>

</html>
原文地址:https://www.cnblogs.com/jdy1022/p/14744214.html