查詢電腦對內與對外 IP
這篇文章會使用 Python 的 socket 標準函式庫,讀取目前電腦對內的連線 IP ( 內網 ),接著會搭配 Requests 第三方函式庫,實作可以取得對外 IP ( 外網 ) 的功能。
本篇建議使用本機環境 ( 參考:使用 Python 虛擬環境 ) 或 Anaconda Jupyter ( 參考:使用 Anaconda ) 進行實作。
查詢電腦對內 IP
如果要查詢電腦對內的 IP ( 內網 ),可以使用 Python 的 socket 標準函式庫進行處理,socket 函式庫可以建立 Server 端 ( 伺服器 ) 以及 Client 端 ( 使用者 ),讓彼此互相連接和發送訊息,下方是 socket 的基本用法:
socket.socket(family, type, proto)
# family:IPv4 本機、IPv4 網路、IPv6 網路。
# type:使用 TCP 或 UDP 方式。
# protocol: 串接協定 ( 通常預設 0 )。
family 和 type 參數的內容如下:
參數 | 宣內容 | 說明 |
---|---|---|
family | socket.AF_UNIX | IPv4 本機。 |
socket.AF_INET | IPv4 網路。 | |
socket.AF_INET6 | IPv6 網路。 | |
type | socket.SOCK_STREAM | 使用 TCP。 |
socket.SOCK_DGRAM | 使用 UDP。 |
下方的程式碼執行後,會使用 socket 函式庫的 socket 方法,向「8.8.8.8 port 80」的位址進行初始化連結 ( Google 的 Public DNS ),連結後就可以得到對內的 IP。
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
ip = s.getsockname()[0]
print(ip)
s.close()
查詢電腦對外 IP
如果要查詢電腦對外的 IP ( 外網 ),則需要透過 Requests 函式庫向特定網站 ( 例如 api.ipify.org ) 發送請求,就能獲得回傳的 IP 資訊 ( 參考:Requests 函式庫 )。
import requests
ip = requests.get('https://api.ipify.org').text
print(ip)
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~