在 Python 中獲取 IP 地址

Shivam Arora 2023年1月30日 2021年7月9日
  1. 在 Python 中使用 socket.gethostname() 函式獲取本地 IP 地址
  2. 在 Python 中使用 socket.getsockname() 函式獲取本地 IP 地址
  3. 在 Python 中使用 netifaces 模組獲取本地 IP 地址
在 Python 中獲取 IP 地址

IP 地址是從 0.0.0.0 到 255.255.255.255 的一串數字,每個數字的地址範圍為 0 到 255。它可以唯一標識網路上的裝置。

在本文中,我們將使用 Python 獲取本地 IP 地址。

在 Python 中使用 socket.gethostname() 函式獲取本地 IP 地址

我們可以使用 Python 中的 socket 模組來建立網路連線並通過網路傳送訊息。

函式 gethostname() 返回當前正在執行 Python 的系統主機名。

例如,

import socket
print(socket.gethostbyname(socket.gethostname()))

輸出:

192.168.0.118

在 Python 中使用 socket.getsockname() 函式獲取本地 IP 地址

如果計算機裝置有連線到 Internet 的路由,那麼我們可以使用 getsockname() 函式。它以元組的形式返回 IP 地址和埠。

請參考下面的程式碼。

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
print(s.getsockname()[0])

輸出:

192.168.0.112

此方法返回本地機器的主 IP,即預設路由。

我們也可以使用這個函式來建立一個不需要任何可路由網際網路訪問的使用者定義函式。

請參考下面的程式碼。

import socket
def extract_ip():
    st = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    try:       
        st.connect(('10.255.255.255', 1))
        IP = st.getsockname()[0]
    except Exception:
        IP = '127.0.0.1'
    finally:
        st.close()
    return IP
print(extract_ip())

輸出:

192.168.0.112

上述方法適用於所有介面。它還適用於所有公共、私有、外部 IP。這種方法在 Linux、Windows 和 OSX 上很有效。

在 Python 中使用 netifaces 模組獲取本地 IP 地址

netifaces 模組用於提供有關網路介面及其狀態的資訊。

我們可以使用它來獲取本地機器的 IP 地址,如下所示。

from netifaces import interfaces, ifaddresses, AF_INET
for ifaceName in interfaces():
    addresses = [i['addr'] for i in ifaddresses(ifaceName).setdefault(AF_INET, [{'addr':'No IP addr'}] )]
    print(' '.join(addresses))

輸出:

No IP addr
No IP addr
No IP addr
No IP addr
192.168.0.104
127.0.0.1

相關文章 - Python Network