JS获取ip地址

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>获取ip</title>
</head>
<body>
<script src="https://pv.sohu.com/cityjson?ie=utf-8"></script>
<script src="/js/public/jquery.js"></script>
<script type="text/javascript">
    $(function(){
        //获取外网ip方式1:搜狐
        getIpBysouhu();
        
        //获取外网ip方式2:ipify
        getIpByIpify();
        
        //获取内网ip方式1:
        getIP();

    });
    //获取外网ip方式1:搜狐
    function getIpBysouhu(){
        console.log("---cip---"+returnCitySN["cip"]);
        console.log("---cid---"+returnCitySN["cid"]);
        console.log("---cname---"+returnCitySN["cname"]);
    }
    //获取外网ip方式2:ipify
    function getIpByIpify(){
        $.ajax({
            url : "https://api.ipify.org/?format=json",
            type : "GET",
            data : {},
            dataType : "json",
            success : function(result) {
                console.log("---ip---"+result.ip);
            },
            error : function(){
                
            }
        });
    }
    //获取内网ip方式1:
    function getIP() {
        let recode = {};
        let RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
        // 如果不存在则使用一个iframe绕过
        if (!RTCPeerConnection) {
            // 因为这里用到了iframe,所以在调用这个方法的script上必须有一个iframe标签
            // <iframe id="iframe" sandbox="allow-same-origin" style="display:none;"></iframe>
            let win = iframe.contentWindow;
            RTCPeerConnection = win.RTCPeerConnection || win.mozRTCPeerConnection || win.webkitRTCPeerConnection;
        }

        //创建实例,生成连接
        let pc = new RTCPeerConnection();

        // 匹配字符串中符合ip地址的字段
        function handleCandidate(candidate) {
            let ip_regexp = /([0-9]{1,3}(\.[0-9]{1,3}){3}|([a-f0-9]{1,4}((:[a-f0-9]{1,4}){7}|:+[a-f0-9]{1,4}){6}))/;
            let ip_isMatch = candidate.match(ip_regexp)[1];
            console.log("---ip(内)---"+ip_isMatch);
            if (!recode[ip_isMatch]) {
                recode[ip_isMatch] = true;
            }
        }

        //监听icecandidate事件
        pc.onicecandidate = (ice) => {
            if (ice.candidate) {
                handleCandidate(ice.candidate.candidate);
            }
        };
        //建立一个伪数据的通道
        pc.createDataChannel('');
        pc.createOffer((res) => {
            pc.setLocalDescription(res);
        }, () => {});

        //延迟,让一切都能完成
        setTimeout(() => {
            let lines = pc.localDescription.sdp.split('\n');
            lines.forEach(item => {
                if (item.indexOf('a=candidate:') === 0) {
                    handleCandidate(item);
                }
            })
        }, 1000);
    }
</script>
</body>
</html>

  

posted @ 2019-05-27 16:12  Goatherd  阅读(18209)  评论(0编辑  收藏  举报