JS獲取本地IP地址

一、js獲取本地ip的介紹

在Web開發中,有時候需要獲取用戶的本機IP地址,以達到一些特殊的應用需求。但是在Web環境下獲取本機IP地址存在一定的限制。網上常見的解決方案通常是通過JavaScript或後端語言獲取用戶的IP地址,並將其傳給服務端。本文將主要介紹如何使用JS來獲取用戶的本機IP地址。

二、JS獲取本地IP的方法

JS獲取本地IP地址的主要方法是通過RTCPeerConnection對象來實現。首先需要創建RTCPeerConnection對象,然後通過RTCPeerConnection對象的getStats方法獲取本地IP地址。下面是JS代碼示例:

let ip;
const rtcPeerConn = new RTCPeerConnection();
rtcPeerConn.createDataChannel('');
rtcPeerConn.createOffer().then((offer) => {
    return rtcPeerConn.setLocalDescription(offer);
}).then(() => {
    return new Promise((resolve) => {
        if (rtcPeerConn.iceGatheringState === 'complete') {
            resolve();
        } else {
            const onIceCandidate = (event) => {
                if (event.candidate === null) {
                    rtcPeerConn.removeEventListener('icecandidate', onIceCandidate);
                    resolve();
                }
            };
            rtcPeerConn.addEventListener('icecandidate', onIceCandidate);
        }
    });
}).then(() => {
    const connection = rtcPeerConn.getStats().then((results) => {
        const candidates = [];
        results.forEach((result) => {
            if (result.type === 'candidate') {
                const candidate = JSON.stringify(result.candidate);
                if (candidate.indexOf(ip) !== -1) {
                    candidates.push(candidate);
                }
            }
        });
        console.log(candidates);
    });
}).catch((error) => {
    console.error(error);
});

三、JS獲取本地IP地址和主機名稱

JS獲取本地IP地址和主機名稱的方法與獲取本地IP地址類似。只需要利用WebSocket協議來獲取本機IP地址和主機名。下面是JS代碼示例:

const ws = new WebSocket('ws://echo.websocket.org');
ws.onopen = () => {
    const address = ws._socket.localAddress;
    const hostname = ws._socket.localPort;
    console.log(`Address: ${address} Hostname: ${hostname}`);
    ws.close();
};

四、其它相關內容

除了使用JS來獲取本地IP地址之外,還有其他語言有不同的實現方式。如C語言、Vue.js等,都可以實現獲取本地IP地址和主機名稱的功能。

C語言通過sockaddr結構體來獲取本地IP地址。可以通過getsockname函數來獲取本地IP地址和端口號,具體實現如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
int main(int argc, const char **argv) {
    int sockfd, connfd;
    struct sockaddr_in servaddr, remoteaddr;
    socklen_t remoteaddr_len = sizeof(remoteaddr);
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd == -1) {
        printf("socket error\n");
        exit(0);
    }
    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
    servaddr.sin_port=htons(8000);
    bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
    listen(sockfd, 1);
    connfd = accept(sockfd, (struct sockaddr *)&remoteaddr, &remoteaddr_len);
    memset(&remoteaddr, 0, sizeof(remoteaddr));
    getsockname(connfd, (struct sockaddr *)&remoteaddr, &remoteaddr_len);
    char buf[100];
    printf("Address: %s port: %d\n", inet_ntop(AF_INET, &remoteaddr.sin_addr, buf, sizeof(buf)), ntohs(remoteaddr.sin_port));
    close(sockfd);
    return 0;
}

而使用Vue.js來獲取本地IP地址,則需要通過後端API接口來獲取。下面是Vue.js代碼示例:

methods: {
    getIPAddress: function () {
        this.$http.get('https://api.ipify.org').then(response => {
            console.log(response.body);
        }, response => {
            console.log('Request failed');
        });
    }
}

五、小結

通過以上的介紹,我們了解了JS獲取本地IP地址的方法。這個方法對於特定的應用場景是非常有用的。但是其還是存在一定的限制,需要使用瀏覽器提供的API或後端API來實現。

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
YOQT的頭像YOQT
上一篇 2024-10-12 09:43
下一篇 2024-10-12 09:43

相關推薦

  • JS Proxy(array)用法介紹

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

    編程 2025-04-29
  • cmd看地址

    本文將從多個方面詳細闡述cmd看地址,包括如何查看本機IP地址、如何查看路由器IP、如何查看DNS服務器IP等等。 一、查看本機IP地址 要查看本機IP地址,首先需要打開cmd窗口…

    編程 2025-04-29
  • 尚硅谷官網地址用法介紹

    尚硅谷是國內一家領先的技術培訓機構,提供了眾多IT職業的培訓,包括Java、Python、大數據、前端、人工智能等方向。其官網地址為http://www.atguigu.com/。…

    編程 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
  • Idea2022變更Git地址

    本文將從以下幾個方面對Idea2022變更Git地址進行詳細闡述: 一、GitHub上修改Git倉庫地址 1、登錄GitHub,找到需要修改的Git倉庫 2、在代碼頁面點擊右上角的…

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

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

    編程 2025-04-27

發表回復

登錄後才能評論