前端获取IP地址几种常见的方法及其代码实例

 更新时间:2025年09月15日 08:39:18   作者:itanly  
在前端获取当前IP地址,由于浏览器环境的安全限制,无法直接获取到用户的IP地址,不过可以通过几种间接方法来实现,这篇文章主要介绍了前端获取IP地址几种常见的方法及其代码实例,需要的朋友可以参考下

前言

前端获取IP地址有多种方法,可以通过第三方API、WebRTC、服务器代理等方式实现。以下是几种常见的方法及其代码实例。

使用第三方API获取IP地址

第三方API是最简单的方式,通常免费且无需复杂配置。常用的API包括ipify、ipapi等。

fetch('https://api.ipify.org?format=json')
  .then(response => response.json())
  .then(data => console.log('IP地址:', data.ip))
  .catch(error => console.error('获取IP失败:', error));
fetch('https://ipapi.co/json/')
  .then(response => response.json())
  .then(data => console.log('IP地址:', data.ip))
  .catch(error => console.error('获取IP失败:', error));

这些API返回JSON格式的数据,包含IP地址及其他信息(如地理位置、ISP等)。

通过WebRTC获取本地IP地址

WebRTC可以获取客户端的本地IP地址,但通常只能获取内网IP,而非公网IP。以下是通过WebRTC获取本地IP的代码:

const getLocalIP = async () => {
  const peerConnection = new RTCPeerConnection({ iceServers: [] });
  peerConnection.createDataChannel('');
  peerConnection.createOffer()
    .then(offer => peerConnection.setLocalDescription(offer))
    .catch(error => console.error('WebRTC错误:', error));

  peerConnection.onicecandidate = (event) => {
    if (event.candidate) {
      const ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3})/;
      const ipMatch = event.candidate.candidate.match(ipRegex);
      if (ipMatch) {
        console.log('本地IP地址:', ipMatch[1]);
        peerConnection.close();
      }
    }
  };
};

getLocalIP();

注意:WebRTC可能因浏览器隐私策略受限,需在HTTPS环境或localhost下运行。

通过服务器代理获取IP地址

如果前端无法直接获取IP,可以通过后端服务获取,前端调用API即可。以下是一个简单的Node.js后端示例:

// 后端代码(Node.js + Express)
const express = require('express');
const app = express();

app.get('/get-ip', (req, res) => {
  const ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
  res.json({ ip });
});

app.listen(3000, () => console.log('服务器运行中'));

前端调用:

fetch('http://localhost:3000/get-ip')
  .then(response => response.json())
  .then(data => console.log('IP地址:', data.ip))
  .catch(error => console.error('获取IP失败:', error));

使用CDN获取IP地址

部分CDN服务(如Cloudflare)会在请求头中传递客户端IP。前端可以通过读取请求头获取:

fetch('https://example.com/api/get-ip', {
  headers: { 'Accept': 'application/json' }
})
  .then(response => response.json())
  .then(data => console.log('IP地址:', data.ip));

后端需配置CDN传递IP头信息(如CF-Connecting-IPX-Forwarded-For)。

通过DNS查询获取IP地址

通过DNS查询可以获取客户端的大致地理位置,但无法直接获取IP。以下是一个示例:

const hostname = window.location.hostname;
const dnsLookup = async () => {
  const response = await fetch(`https://dns.google/resolve?name=${hostname}`);
  const data = await response.json();
  console.log('DNS查询结果:', data);
};
dnsLookup();

这种方法主要用于调试,实际应用较少。

总结

前端获取IP地址的方法多种多样,具体选择需根据场景决定:

  • 第三方API简单易用,适合快速获取公网IP。
  • WebRTC适合获取本地IP,但受隐私策略限制。
  • 服务器代理和CDN适合需要精确控制的场景。
  • DNS查询适用性较低,通常不推荐。

到此这篇关于前端获取IP地址几种常见的方法及其代码实例的文章就介绍到这了,更多相关前端获取IP地址内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • js 获取范围内的随机数实例代码

    js 获取范围内的随机数实例代码

    下面小编就为大家带来一篇js 获取范围内的随机数实例代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • JavaScript实现的encode64加密算法实例分析

    JavaScript实现的encode64加密算法实例分析

    这篇文章主要介绍了JavaScript实现的encode64加密算法,实例分析了javascript处理encode64编码针对字符串加密的技巧,非常简洁实用,需要的朋友可以参考下
    2015-04-04
  • IE中图片的onload事件无效问题和解决方法

    IE中图片的onload事件无效问题和解决方法

    这篇文章主要介绍了IE中图片的onload事件无效问题和解决方法,这是一个很经典的问题,其实只需要调换一下代码顺序即可解决,需要的朋友可以参考下
    2014-06-06
  • 微信小程序中使用Async-await方法异步请求变为同步请求方法

    微信小程序中使用Async-await方法异步请求变为同步请求方法

    这篇文章主要介绍了微信小程序中使用Async-await方法异步请求变为同步请求方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • 跟我学习javascript的undefined与null

    跟我学习javascript的undefined与null

    跟我学习javascript的undefined与null,从定义上理解null和undefined,告诉大家提高undefined性能的方法,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • JS数据类型分类及常用判断方法

    JS数据类型分类及常用判断方法

    这篇文章主要介绍了JS数据类型分类及常用判断方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • javascript 发布-订阅模式 实例详解

    javascript 发布-订阅模式 实例详解

    这篇文章主要介绍了javascript 发布-订阅模式,结合实例形式详细分析了javascript发布-订阅模式基本功能、原理、实现方法与相关使用技巧,需要的朋友可以参考下
    2023-06-06
  • jQuery右下角旋转环状菜单特效代码

    jQuery右下角旋转环状菜单特效代码

    jquery实现右下角旋转环形菜单特效代码,是固定在页面右下角位置,当用户点击了主菜单按钮后,子菜单项会以环状旋转进入页面,并使用animate.css制作动画效果,有需要的朋友可以参考下
    2015-08-08
  • Javascript中的神器——Promise

    Javascript中的神器——Promise

    本文主要介绍了Javascript中Promise的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • javascript实现左右控制无缝滚动

    javascript实现左右控制无缝滚动

    这篇文章主要介绍了javascript实现左右控制无缝滚动的方法及示例代码,需要的朋友可以参考下
    2014-12-12

最新评论