本篇文章更新時間:2019/02/16
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
這篇是在 Stack Overflow 上看到的「Finding local IP addresses using Python's stdlib」問題。
在取得電腦本機對外 IP 的眾多解答中,我喜歡不是有勾勾的那個答案。
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
print(s.getsockname()[0])
s.close()
使用標準函式庫 socket 發起一個「對外」連線,目的地不一定要是 Googld DNS ,可以隨意(不能是 127.0.0.1
)。然後透過 getsockname
方法取回「本地位址與對外開放的連線阜號」。
這個答案也跨平台適用在 Windows / Linux / Mac OS 主流系統上。
原理就是把「對外」這件事的判斷交給系統判斷哪組 IP 可以使用。這與有些解答為「列出目前所有 IP」再做拆解判斷的作法又更直接了!