如何獲取本地IP地址

一、獲取本機IP地址

獲取本機IP地址的方法具有一定的系統依賴,不同的系統實現方式有所不同。下面我們分別介紹Windows、Linux和Mac OS系統下獲取本機IP地址的方法。

1、Windows系統

import socket

def get_local_ip():
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('8.8.8.8', 80))
        ip = s.getsockname()[0]
    finally:
        s.close()
    return ip

print(get_local_ip())

上面的代碼使用Python的socket模塊來獲取本機IP地址,連接Google的DNS伺服器8.8.8.8時,獲取本機IP地址。其中,socket.AF_INET表示使用IPv4協議,socket.SOCK_DGRAM表示使用UDP協議。

2、Linux系統

ifconfig

在Linux下,ifconfig命令可以用來查看本機的IP地址。

3、Mac OS系統

ifconfig | grep "inet " | grep -v 127.0.0.1 | awk '{ print $2 }'

在Mac OS下,可以使用ifconfig命令來獲取本地IP地址,然後通過grep和awk命令來提取IP地址。

二、拼本地連接IP地址

在使用網路編程時,經常需要獲取本地連接IP地址,它是由本機的IP地址和埠號組成的一個唯一標識。下面是Python的示例代碼:

import socket

def get_local_addr():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.connect(('8.8.8.8', 80))
    ip, port = s.getsockname()
    s.close()
    return f"{ip}:{port}"

print(get_local_addr())

上面的代碼中,首先創建了一個socket對象,然後調用connect()方法連接Google的DNS伺服器8.8.8.8。然後通過調用getsockname()方法獲取本地IP地址和埠號,並返回一個拼接好的字元串。

三、使用JavaScript和Vue獲取本地IP地址

現在,越來越多的Web應用需要獲取客戶端的IP地址。下面我們分別介紹使用JavaScript和Vue框架來獲取本機IP地址的方法。

1、使用JavaScript

使用JavaScript獲取本機IP地址的方法非常簡單,只需要創建一個UDP連接,然後通過connection屬性獲取本機IP地址即可:

const udp = new RTCPeerConnection({iceServers: []})
udp.createDataChannel('')
udp.createOffer().then(offer => udp.setLocalDescription(offer))
udp.onicecandidate = evt =>
    t(c => c && c.dispatchEvent(new CustomEvent('rtc:ip', {detail: evt.candidate.candidate.split(' ')[4]})))

上面的代碼創建了一個RTCPeerConnection對象,然後創建一個未命名的數據通道和一個offer對象,設置本地SDP,然後獲取本機IP地址並觸發一個自定義事件。

2、使用Vue

在Vue框架中獲取本機IP地址的方法與使用JavaScript相似,但需要先安裝webrtc-adapter庫:

npm install webrtc-adapter -S

然後,在Vue組件中添加以下代碼:

<script>
import adapter from 'webrtc-adapter'

export default {
  mounted () {
    const pc = new window.RTCPeerConnection({ iceServers: [] })
    let ipAddr

    pc.createDataChannel('')
    pc.createOffer()
      .then(offer => pc.setLocalDescription(offer))
      .then(() => new Promise(resolve => { pc.onicecandidate = e => { if (!e.candidate) resolve() } }))
      .then(() => {
        const regex = /([0-9]{1,3}(\.[0-9]{1,3}){3})/
        const candidate = pc.localDescription.candidate
        ipAddr = regex.exec(candidate)[1]

        console.log('**** LOCAL IP ADDRESS: ', ipAddr)
      })
      .catch(error => {
        console.error('**** ERROR: ', error)
      })
  }
}
</script>

上面的代碼中,首先創建了一個RTCPeerConnection對象,然後創建一個未命名的數據通道和一個offer對象,設置本地SDP,然後獲取本機IP地址。

四、獲取本地IP的多個網卡地址

多個網卡是指一台計算機上安裝了多個不同的網卡,每個網卡都有一個IP地址。獲取本地IP的多個網卡地址時,需要使用Python的socket庫和fcntl庫。

import socket
import fcntl
import struct

def get_local_ips():
    ips = []
    interfaces = socket.if_nameindex()
    for if_idx in interfaces:
        ifname = if_idx[1]
        if ifname.startswith('lo'):
            continue
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        ip = fcntl.ioctl(s.fileno(), 0x8915, struct.pack('256s', ifname[:15].encode('utf-8')))
        ips.append(socket.inet_ntoa(ip[20:24]))
    return ips

print(get_local_ips())

上面的代碼中,首先使用if_nameindex()函數獲取所有網卡的名稱和索引,然後分別獲取每個網卡對應的IP地址。

五、獲取本機IP地址的命令

在Linux和Mac OS系統下,可以使用ifconfig命令來查看本機的IP地址。

ifconfig

在Windows系統下,可以使用ipconfig命令來查看本機的IP地址。

ipconfig

六、獲取本地IP地址失敗

實際上,獲取本地IP地址是受網路環境和計算機系統等多種因素影響的。如果獲取失敗,可以嘗試使用下面的方法:

  • 確保本機已連接到網路,並且網路正常。
  • 檢查計算機防火牆和殺毒軟體的設置,有時候它們會禁止獲取本機IP地址。
  • 使用不同的獲取IP地址的方法,比如使用JavaScript或者命令行。

七、獲取本地IP地址程序

下面是一個Python程序,通過socket庫實現獲取本地IP地址:

import socket

def get_local_ip():
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('8.8.8.8', 80))
        ip = s.getsockname()[0]
    finally:
        s.close()
    return ip

if __name__ == '__main__':
    print(get_local_ip())

上面的程序會列印出本機的IP地址。

八、獲取本地IP地址Node.js

在Node.js中獲取本地IP地址的方法非常簡單,只需要使用os庫和networkInterfaces()函數即可:

const os = require('os')

function getLocalIP () {
  const interfaces = os.networkInterfaces()
  for (const ifname of Object.keys(interfaces)) {
    const iface = interfaces[ifname]

    for (const alias of iface) {
      if (alias.family === 'IPv4' && !alias.internal) {
        return alias.address
      }
    }
  }

  return '127.0.0.1'
}

console.log(getLocalIP())

上面的代碼會列印出本機的IP地址。

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
VSKUL的頭像VSKUL
上一篇 2025-01-21 17:30
下一篇 2025-01-21 17:30

相關推薦

  • 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
  • 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
  • electron-egg打包後請求地址錯誤解決方法用法介紹

    本文將從多個方面對electron-egg打包後請求地址錯誤進行詳細闡述,並給出解決方法。 一、electron-egg打包後請求地址錯誤的表現 在使用 electron-egg …

    編程 2025-04-27
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若伺服器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • Python如何判斷IP地址合法性

    IP地址是網路通信的基礎,因此判斷IP地址合法性是編程中常見的問題。Python作為一門強大的編程語言,提供了多種方法來判斷IP地址的合法性。 一、判斷IP地址格式是否正確 IP地…

    編程 2025-04-27
  • Python處理「該請求的地址無效」的解決方法

    本文將從以下幾個方面為大家詳細闡述在python中處理「該請求的地址無效」的解決方法。 一、檢查URL地址是否正確 當我們在使用Python發送網路請求時,如果URL地址不正確,就…

    編程 2025-04-27

發表回復

登錄後才能評論