Vue获取IP地址详解

一、前言

在前端开发中,有时候需要获取用户的IP地址,以便做一些后续的处理。本文将从多个方面对Vue获取IP地址做详细阐述。

二、前端Vue获取IP地址

Vue作为一种流行的前端框架,如何获取IP地址呢?可以使用浏览器端Javascript来实现。具体代码如下:

async function fetchIP() {
  const res = await fetch('https://api.ipify.org?format=json')
  const json = await res.json()
  return json.ip
}

const ip = await fetchIP()
console.log(ip)

上述代码可以通过调用ipify.org提供的API获取本机IP地址。通过await 可以等待异步请求的结果并返回IP地址。

三、Vue获取内网IP地址

如果需要获取内网IP地址,只能通过客户端进行获取。可以使用WebRTC API来实现,代码如下:

function getInternalIPAddress() {
  return new Promise(function (resolve, reject) {
    window.RTCPeerConnection = window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection;
    if (window.RTCPeerConnection) {
      var rtc = new RTCPeerConnection({
        iceServers: []
      });
      if (1 || window.mozRTCPeerConnection) {
        rtc.createDataChannel('', {
          reliable: false
        });
      };
      rtc.onicecandidate = function (evt) {
        if (evt.candidate) grepSDP("a=" + evt.candidate.candidate);
      };
      rtc.createOffer(function (offerDesc) {
        grepSDP(offerDesc.sdp);
        rtc.setLocalDescription(offerDesc);
      }, function (e) {
        console.warn("offer failed", e);
      });

      var addrs = Object.create(null);
      addrs["0.0.0.0"] = false;

      var rSplit = /(^\d+|\.[^.]+)/g;

      function grepSDP(sdp) {
        var hosts = [];
        sdp.split('\r\n').forEach(function (line, index, arr) {
          if (~line.indexOf("a=candidate")) {
            var parts = line.split(' '),
              addr = parts[4],
              type = parts[7];
            if (type === 'host') {
              var s = addr.split(rSplit);
              s.pop();
              hosts.push(s.join(''));
            }
          } else if (~line.indexOf("c=")) {
            var parts = line.split(' '),
              addr = parts[2];
            var s = addr.split(rSplit);
            s.pop();
            hosts.push(s.join(''));
          }
        });

        hosts.forEach(function (host) {
          addrs[host] = true;
        });
      }

      setTimeout(function () {
        Object.keys(addrs).some(function (k) {
          if (addrs[k])
            resolve(k);
        });
      }, 1500);
    } else {
      reject("WebRTC not supported");
    }
  });
}

getInternalIPAddress().then(function (ip) {
  console.log(ip);
}).catch(function (e) {
  console.error(e);
});

上述代码使用WebRTC API来获取内网IP地址。通过调用getInternalIPAddress()方法并使用.then()返回结果。

四、Vue获取服务器IP地址

如果需要获取服务器端的IP地址,可以通过后端提供的API来获取。以Node.js为例,可以使用以下代码实现:

const os = require('os');

function getServerIP() {
  const ifaces = os.networkInterfaces();
  let ip = '';
  Object.keys(ifaces).forEach((ifname) => {
    ifaces[ifname].forEach((iface) => {
      if (iface.family !== 'IPv4' || iface.internal !== false) {
        return;
      }
      ip = iface.address;
    });
  });
  return ip;
}

const ip = getServerIP();
console.log(ip);

上述代码可以通过Node.js内置的os模块获取服务器端的IP地址。通过调用getServerIP()方法即可获取。

五、Vue获取客户端IP地址

如果需要获取客户端IP地址,可以通过后端提供的API来获取。以Node.js为例,可以使用以下代码实现:

const requestIp = require('request-ip');

function getClientIP(req) {
  const clientIp = requestIp.getClientIp(req);
  return clientIp;
}

const clientIp = getClientIP(req);
console.log(clientIp);

上述代码可以通过使用request-ip模块获取客户端IP地址。通过调用getClientIP(req)方法传入请求参数即可获取。

六、Vue获取本地IP地址

获取本地IP地址可以通过使用Java Applet来实现。代码如下:



  var attributes = {
    id: 'getLocalIPAddress',
    code: 'GetLocalIPAddress.class',
    archive: 'GetLocalIPAddress.jar',
    width: 0,
    height: 0
  };
  var parameters = {
    codebase_lookup: false
  };
  deployJava.runApplet(attributes, parameters, '1.6');

上述代码虽然可以获取本地IP地址,但需要先安装Java Applet并在前端使用<applet>标签来调用。因此不建议使用。

七、Vue获取本地IP地址

如果需要获取用户的IP地址,可以通过后端提供的API来获取。以Node.js为例,可以使用以下代码实现:

const requestIp = require('request-ip');

function getUserIP(req) {
  const userIp = requestIp.getClientIp(req);
  return userIp;
}

const userIp = getUserIP(req);
console.log(userIp);

上述代码可以通过使用request-ip模块获取用户IP地址。调用getUserIP(req)方法传入请求参数即可获取。

八、Vue获取客户端IP地址(使用window对象)

如果需要通过window对象来获取客户端IP地址,可以使用以下代码实现:

function getClientIP() {
  let ip = ''
  fetch('https://api.ipify.org')
    .then((response) => {
      return response.text()
    })
    .then((data) => {
      ip = data
    })
    .catch(() => {});

  return ip
}

const clientIp = getClientIP();
console.log(clientIp);

上述代码可以通过调用ipify.org提供的API获取本机IP地址,通过fetch请求返回结果。但由于fetch是异步的,需要使用Promise来获取返回结果。

九、Vue自动获取IP地址上不了网

如果自动获取IP地址失败无法上网,可以手动获取本机IP地址。可以使用命令行工具(如Windows下的cmd或Linux下的Terminal)来实现,代码如下:

ipconfig (Windows)
ifconfig (Linux)

上述代码可以手动打开命令行工具,并输入相应指令来查看本机IP地址。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/236724.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝的头像小蓝
上一篇 2024-12-12 12:01
下一篇 2024-12-12 12:01

相关推荐

  • cmd看地址

    本文将从多个方面详细阐述cmd看地址,包括如何查看本机IP地址、如何查看路由器IP、如何查看DNS服务器IP等等。 一、查看本机IP地址 要查看本机IP地址,首先需要打开cmd窗口…

    编程 2025-04-29
  • 使用Vue实现前端AES加密并输出为十六进制的方法

    在前端开发中,数据传输的安全性问题十分重要,其中一种保护数据安全的方式是加密。本文将会介绍如何使用Vue框架实现前端AES加密并将加密结果输出为十六进制。 一、AES加密介绍 AE…

    编程 2025-04-29
  • 尚硅谷官网地址用法介绍

    尚硅谷是国内一家领先的技术培训机构,提供了众多IT职业的培训,包括Java、Python、大数据、前端、人工智能等方向。其官网地址为http://www.atguigu.com/。…

    编程 2025-04-29
  • Centos7配置静态ip

    本文将详细阐述如何在Centos7系统中配置静态ip。 一、查看网络接口 在配置静态ip之前,我们首先需要查看系统中的网络接口,以确定我们需要配置的网卡是哪一个。 ifconfig…

    编程 2025-04-29
  • Vue TS工程结构用法介绍

    在本篇文章中,我们将从多个方面对Vue TS工程结构进行详细的阐述,涵盖文件结构、路由配置、组件间通讯、状态管理等内容,并给出对应的代码示例。 一、文件结构 一个好的文件结构可以极…

    编程 2025-04-29
  • Python检测IP连通

    Python是一门强大的编程语言,常用于网络开发、数据分析等领域。IP地址是网络通信的基础,在网络通信中,有时需要检测IP地址是否连通。下面将从多个方面介绍Python检测IP连通…

    编程 2025-04-28
  • Idea2022变更Git地址

    本文将从以下几个方面对Idea2022变更Git地址进行详细阐述: 一、GitHub上修改Git仓库地址 1、登录GitHub,找到需要修改的Git仓库 2、在代码页面点击右上角的…

    编程 2025-04-28
  • Treck TCP/IP Stack 输入验证错误漏洞CVE-2020-11901解析

    本文将对Treck TCP/IP Stack 输入验证错误漏洞CVE-2020-11901进行详细解析,并提供相关代码示例。 一、漏洞背景 Treck TCP/IP Stack是一…

    编程 2025-04-27
  • Vue3的vue-resource使用教程

    本文将从以下几个方面详细阐述Vue3如何使用vue-resource。 一、安装Vue3和vue-resource 在使用vue-resource前,我们需要先安装Vue3和vue…

    编程 2025-04-27
  • electron-egg打包后请求地址错误解决方法用法介绍

    本文将从多个方面对electron-egg打包后请求地址错误进行详细阐述,并给出解决方法。 一、electron-egg打包后请求地址错误的表现 在使用 electron-egg …

    编程 2025-04-27

发表回复

登录后才能评论