js获取ip地址的私有地址 或者公有地址

本文详细介绍如何使用JavaScript获取用户的私有和公共IP地址。包括利用WebRTC API获取私有IP,以及通过ipinfo.io和ipify等服务安全地获取公共IP地址。适合Web开发者学习和实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

js 获取私有ip地址的方法

function getUserIP(onNewIP) { 
    //firefox和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) {
    	// !localIPs[ip] 判断是如果存在的ip地址,就不再调用该方法 节省性能开销
        if (!localIPs[ip]) onNewIP(ip);
        localIPs[ip] = true;
    }
     //创建数据通道
    pc.createDataChannel("");
    // 获取本地的描述
    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) {
    	// 出现错误,请处理连接失败
    });

    //倾听candidate 事件
    pc.onicecandidate = function(ice) {
        if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;
        // match 字符串的匹配方法, 因为使用了g 全局匹配,他这个返回的是一个数组,然后去获取到值 传递给这个函数
        ice.candidate.candidate.match(ipRegex).forEach(iterateIP);
    };
}

// 用法
getUserIP(function(ip){
    alert("Got IP! :" + ip);
});

js 获取公共IP

不安全的连接HTTP
要从没有SSL证书的网站获取用户的IP,可以依靠ipinfo.io。该服务提供了一个API,可通过简单的ajax调用获取客户端IP:

$.getJSON('http://ipinfo.io', function(data){
    console.log(data);
});

安全连接HTTPS(推荐)

<script type="application/javascript">
  function getIP(json) {
    document.write("My public IP address is: ", json.ip);
  }
</script>

<script type="application/javascript" src="https://api.ipify.org?format=jsonp&callback=getIP"></script>

获取 使用jquery的方法获取

$.getJSON('https://api.ipify.org?format=json', function(data){
    console.log(data.ip);
});

使用可以获取到公有IP地址和所在的地区

<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
<script> console.log(returnCitySN["cip"]+','+returnCitySN["cname"]) </script>

原文链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值