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/zh-tw/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

發表回復

登錄後才能評論