美文网首页
JS通过webRTC获取设备IP

JS通过webRTC获取设备IP

作者: Jessiewu_e94b | 来源:发表于2020-03-04 15:02 被阅读0次

    RTCPeerConnection 接口代表一个由本地计算机到远端的WebRTC连接。该接口提供了创建,保持,监控,关闭连接的方法的实现

    WebRTC在浏览器中的兼容性。参考:

    var PeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;

    (其他请查看https://developer.mozilla.org/zh-CN/docs/Web/API/RTCPeerConnection)

    构造函数:RTCPeerConnection.RTCPeerConnection() ,创建一个新的RTCPeerConnection对象。

    /**

    * Get the user IP throught the webkitRTCPeerConnection

    * @param onNewIP {Function} listener function to expose the IP locally

    * @return undefined

    */

    function getUserIP(onNewIP) { //  onNewIp - your listener function for new IPs

        //compatibility for firefox and chrome

        var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;

        var pc = new myPeerConnection({

            iceServers: []

        }),

        noop = function() {},

        localIPs = {},

        ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,

        key;

        function iterateIP(ip) {

            if (!localIPs[ip]) onNewIP(ip);

            localIPs[ip] = true;

        }

        //create a bogus data channel

        pc.createDataChannel("");

        // create offer and set local description

        pc.createOffer().then(function(sdp) {

            sdp.sdp.split('\n').forEach(function(line) {

                if (line.indexOf('candidate') < 0) return;

                line.match(ipRegex).forEach(iterateIP);

            });

            pc.setLocalDescription(sdp, noop, noop);

        }).catch(function(reason) {

            // An error occurred, so handle the failure to connect

        });

        //listen for candidate events

        pc.onicecandidate = function(ice) {

            if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;

            ice.candidate.candidate.match(ipRegex).forEach(iterateIP);

        };

    }

    // Usage

    getUserIP(function(ip){

        alert("Got IP! :" + ip);

    });

    ————————————————

    原文链接:https://www.cnblogs.com/zyh-club/p/11097418.html

    相关文章

      网友评论

          本文标题:JS通过webRTC获取设备IP

          本文链接:https://www.haomeiwen.com/subject/xgcmlhtx.html