JS獲取本機IP的幾種方法

一、JS獲取本機IP地址

在開發前端應用時,我們可能需要獲取訪問者的IP地址,以便顯示一些對應的信息,這時候我們可以通過JavaScript來獲取本機的IP地址。

//方法一:
function getIPAddress(){
  return new Promise((resolve, reject)=>{
    var RTCPeerConnection = window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection || window.msRTCPeerConnection;
    var pc = new RTCPeerConnection({iceServers:[]}),
      noop = function(){},
      localIPs = {};
    pc.createDataChannel('');
    pc.createOffer(pc.setLocalDescription.bind(pc), noop);
    pc.onicecandidate = function(ice){
      if(!ice || !ice.candidate || !ice.candidate.candidate)  return;
      let ip = /(192\.168|172\.16|10\.(\d{1,3})|([2][5][0-5]|[2][0-4][0-9]|[01]?[0-9][0-9]?)(\.([2][5][0-5]|[2][0-4][0-9]|[01]?[0-9][0-9]?)){2})/.exec(ice.candidate.candidate)[0];
      if(!localIPs[ip]) resolve(ip);
      localIPs[ip] = true;
    };
  });
}

通過RTCPeerConnection可以獲取到本地的IP地址,但是該方案存在一個局限性,即需要用戶允許瀏覽器訪問麥克風和攝像頭,否則獲取不到 IP地址。

//方法二:
function getIPAddress(){
  return new Promise((resolve, reject)=>{
    //使用第三方服務
    $.getJSON("https://api.ipify.org?format=json", function(data){
      resolve(data.ip);
    });
  });
}

該方法通過調用第三方web API獲取本地的IP地址,無需用戶授權,適用於大量數據獲取場景。

二、JS獲取本機IPv4地址

IPv4地址是網絡連接的基礎,更多的應用場景需要使用IPv4地址進行開發。

function getIPv4Address(){
  return new Promise((resolve, reject) => {
    //1.使用w3c api
    window.RTCPeerConnection = window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection;
    if (typeof window.RTCPeerConnection == 'undefined') {
      //使用第三方服務
      $.getJSON("https://ipv4.myexternalip.com/json", function(data){
        resolve(data.ip);
      });
    }
    else {
      var pc = new RTCPeerConnection();
      pc.createDataChannel(''); 
      pc.createOffer(function(sdp){
        pc.setLocalDescription(sdp, function() {});
      }, function onerror(){}); 
      pc.onicecandidate = function(ice) {
        if (!ice || !ice.candidate || !ice.candidate.candidate) return;
        var ip = /([0-9]{1,3}(.[0-9]{1,3}){3})/.exec(ice.candidate.candidate)[1];
        resolve(ip);
      };
    }
  });
}

三、JS獲取本機IPv6地址

IPv6地址是網絡連接的未來,對於全球範圍內分布的設備進行唯一標識不再是問題,而且IPv6地址的長度也比IPv4地址更長,可以支持更複雜的網絡應用場景。

function getIPv6Address(){
  return new Promise((resolve, reject) => {
    //使用第三方服務
    $.getJSON("https://api6.ipify.org?format=json", function(data){
      resolve(data.ip);
    });
  });
}

四、JS獲取本機MAC地址

MAC地址是設備唯一的物理地址,可以通過它來對設備進行唯一標識,而且它是網絡層面的,能夠直接與網絡的通信技術對接。

function getMACAddress(){
  return new Promise((resolve, reject) => {
    //使用第三方服務
    $.getJSON("https://api.macvendors.com", function(data){
      resolve(data);
    });
  });
}

五、JS獲取前端IP地址

前端IP地址是指客戶端的公網IP地址,即用戶真實連接到Internet的IP地址。

function getClientIPAddress(){
  return new Promise((resolve, reject) => {
    //使用第三方服務
    $.getJSON("https://ipapi.co/json/", function(data){
      resolve(data.ip);
    });
  });
}

綜上所述,JS獲取本機IP地址的方法有多種,可以通過調用第三方web API獲取,也可以通過瀏覽器的RTCPeerConnection對象獲取。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/243242.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:55
下一篇 2024-12-12 12:55

相關推薦

  • JS Proxy(array)用法介紹

    JS Proxy(array)可以說是ES6中非常重要的一個特性,它可以代理一個數組,監聽數據變化並進行攔截、處理。在實際開發中,使用Proxy(array)可以方便地實現數據的監…

    編程 2025-04-29
  • Centos7配置靜態ip

    本文將詳細闡述如何在Centos7系統中配置靜態ip。 一、查看網絡接口 在配置靜態ip之前,我們首先需要查看系統中的網絡接口,以確定我們需要配置的網卡是哪一個。 ifconfig…

    編程 2025-04-29
  • 解析js base64並轉成unit

    本文將從多個方面詳細介紹js中如何解析base64編碼並轉成unit格式。 一、base64編碼解析 在JavaScript中解析base64編碼可以使用atob()函數,它會將b…

    編程 2025-04-29
  • Node.js使用Body-Parser處理HTTP POST請求時,特殊字符無法返回的解決方法

    本文將解決Node.js使用Body-Parser處理HTTP POST請求時,特殊字符無法返回的問題。同時,給出一些相關示例代碼,以幫助讀者更好的理解並處理這個問題。 一、問題解…

    編程 2025-04-29
  • Python檢測IP連通

    Python是一門強大的編程語言,常用於網絡開發、數據分析等領域。IP地址是網絡通信的基礎,在網絡通信中,有時需要檢測IP地址是否連通。下面將從多個方面介紹Python檢測IP連通…

    編程 2025-04-28
  • t3.js:一個全能的JavaScript動態文本替換工具

    t3.js是一個非常流行的JavaScript動態文本替換工具,它是一個輕量級庫,能夠很容易地實現文本內容的遞增、遞減、替換、切換以及其他各種操作。在本文中,我們將從多個方面探討t…

    編程 2025-04-28
  • Treck TCP/IP Stack 輸入驗證錯誤漏洞CVE-2020-11901解析

    本文將對Treck TCP/IP Stack 輸入驗證錯誤漏洞CVE-2020-11901進行詳細解析,並提供相關代碼示例。 一、漏洞背景 Treck TCP/IP Stack是一…

    編程 2025-04-27
  • JS圖片沿着SVG路徑移動實現方法

    本文將為大家詳細介紹如何使用JS實現圖片沿着SVG路徑移動的效果,包括路徑製作、路徑效果、以及實現代碼等內容。 一、路徑製作 路徑的製作,我們需要使用到SVG,SVG是可縮放矢量圖…

    編程 2025-04-27
  • 如何使用JS調用Python腳本

    本文將詳細介紹通過JS調用Python腳本的方法,包括使用Node.js、Python shell、child_process等三種方法,以及在Web應用中的應用。 一、使用Nod…

    編程 2025-04-27
  • 如何反混淆美團slider.js

    本文將從多個方面詳細闡述如何反混淆美團slider.js。在開始之前,需要明確的是,混淆是一種保護JavaScript代碼的方法,其目的是使代碼難以理解和修改。因此,在進行反混淆操…

    編程 2025-04-27

發表回復

登錄後才能評論