首頁 > 軟體

分享Python獲取本機IP地址的幾種方法

2022-03-17 13:00:11

1、使用專用網站

獲取的是公網IP

網址:http://myip.ipip.net

程式碼:

import requests
res = requests.get('http://myip.ipip.net', timeout=5).text
print(res)

比較喜歡用這個,在命令視窗也能使用:

curl http://myip.ipip.net

2、使用自帶socket庫

獲取的是區域網IP。

import socket
# 函數 gethostname() 返回當前正在執行 Python 的系統主機名
res = socket.gethostbyname(socket.gethostname())
print(res)

但是上面這個獲取的不是公網IP,結果也不穩定(這裡獲取了虛擬機器器下的IP),不建議使用。

 如果計算機裝置有連線到 Internet 的路由,可以使用:

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

這個獲得的是區域網IP:

可以ipconfig看一下:

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

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())

注意:如果本身區域網IP就是公網IP的話,那這個獲得的,可以認為是公網IP了。

3、使用第三方netifaces庫

獲取的是區域網IP。

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

程式碼:

沒裝的先裝一下庫

pip3 install netifaces

然後使用:

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))

到此這篇關於分享Python獲取本機IP地址的幾種方法的文章就介紹到這了,更多相關Python獲取本機IP方法內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com