如何仅使用纯js获取手机内网和外网IP地址

如何仅使用纯js获取手机内网和外网IP地址


js虽然无法直接获取手机IP地址,但是Javascript能够创建Http请求,并且服务器端语言能够检索用户公共IP。换句话说,如果您要检索用户的公共IP,则 必须从请求到任何服务器的依赖,以便检索IP。但是,随着WebRTC的引入,您将能够使用RTCPeerConnection技巧性地检索用户的私有IP。

在本文中,您将学习如何通过一些技巧轻松地检索用户IP(使用纯JavaScript的私有IP和使用第三方服务的公共IP)。

一、使用webRTC(获取内网IP)


RTCPeerConnection接口允许您在计算机和远程对等方之间创建WebRTC连接,我们可以使用他来实现js获取手机内网IP。

createOffer方法会启动会话描述协议(SDP)的创建,该协议提供有关附加到WebRTC会话的任何MediaStreamTrack,会话,代码以及ICE代理已经收集的任何候选者的信息(包含我们的目标IP)。

在旧版本中,此方法使用回调。但是,现在返回一个基于Promise的值,该值将在获取后返回我们需要的信息:

<script type="text/javascript">
    /**
    * 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(fu...

点击查看剩余70%

{{collectdata}}

网友评论0