當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python socket.getaddrinfo用法及代碼示例


用法:

socket.getaddrinfo(host, port, family=0, type=0, proto=0, flags=0)

host /port 參數轉換為 5 元組序列,其中包含創建連接到該服務的套接字所需的所有參數。 host 是域名,是 IPv4/v6 地址或 None 的字符串表示形式。 port 是字符串服務名稱,例如 'http' 、數字端口號或 None 。通過將 None 作為 hostport 的值傳遞,您可以將 NULL 傳遞給底層 C API。

可以選擇指定 familytypeproto 參數以縮小返回的地址列表。將零作為每個參數的值傳遞會選擇全部結果範圍。 flags 參數可以是一個或幾個AI_* 常量,並將影響結果的計算和返回方式。例如,AI_NUMERICHOST 將禁用域名解析,如果 host 是域名,則會引發錯誤。

該函數返回具有以下結構的 5 元組列表:

(family, type, proto, canonname, sockaddr)

在這些元組中,familytypeproto 都是整數,旨在傳遞給 socket() 函數。 canonname 將是一個字符串,表示 host 的規範名稱,如果 AI_CANONNAMEflags 參數的一部分;否則 canonname 將為空。 sockaddr 是說明套接字地址的元組,其格式取決於返回的 family((address, port) 2 元組用於 AF_INET(address, port, flowinfo, scope_id) 4 元組用於 AF_INET6 ),旨在傳遞給socket.connect() 方法。

使用參數 hostportfamilytypeprotocol 引發審計事件 socket.getaddrinfo

以下示例在端口 80 上獲取與 example.org 的假設 TCP 連接的地址信息(如果未啟用 IPv6,您的係統上的結果可能會有所不同):

>>> socket.getaddrinfo("example.org", 80, proto=socket.IPPROTO_TCP)
[(<AddressFamily.AF_INET6: 10>, <AddressFamily.SOCK_STREAM: 1>,
 6, '', ('2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0)),
 (<AddressFamily.AF_INET: 2>, <AddressFamily.SOCK_STREAM: 1>,
 6, '', ('93.184.216.34', 80))]

在 3.2 版中更改:現在可以使用關鍵字參數傳遞參數。

在 3.7 版中更改:對於 IPv6 多播地址,表示地址的字符串將不包含%scope_id部分。

相關用法


注:本文由純淨天空篩選整理自python.org大神的英文原創作品 socket.getaddrinfo。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。