当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。