socket.getaddrinfo()怎么使用
时间: 2024-04-03 10:36:28 浏览: 70
addrinfo实现
`socket.getaddrinfo()` 函数用于获取指定主机名、端口号、协议类型(IPv4、IPv6)的网络地址(IP 地址和端口号)。函数原型如下:
```python
socket.getaddrinfo(host, port, family=0, type=0, proto=0, flags=0)
```
参数说明:
- `host`:要获取网络地址的主机名。可以是主机名(如 www.example.com)或 IP 地址(如 192.168.0.1)。
- `port`:要获取网络地址的端口号。可以是整数(如 80)或字符串(如 "http")。
- `family`:网络地址族。默认为 0,表示同时获取 IPv4 和 IPv6 地址。可以指定为 `socket.AF_INET`(获取 IPv4 地址)或 `socket.AF_INET6`(获取 IPv6 地址)。
- `type`:套接字类型。默认为 0,表示无限制。可以指定为 `socket.SOCK_STREAM`(流式套接字)或 `socket.SOCK_DGRAM`(数据报套接字)。
- `proto`:协议类型。默认为 0,表示无限制。可以指定为 `socket.IPPROTO_TCP`(TCP 协议)或 `socket.IPPROTO_UDP`(UDP 协议)。
- `flags`:可选标志。默认为 0,表示无标志。
函数返回值是一个列表,每个元素是一个 5 元组:
```python
(family, type, proto, canonname, sockaddr)
```
其中:
- `family`:地址族(IPv4 或 IPv6)。
- `type`:套接字类型(流式套接字或数据报套接字)。
- `proto`:协议类型(TCP 或 UDP)。
- `canonname`:规范主机名。
- `sockaddr`:网络地址(IP 地址和端口号)。
示例代码:
```python
import socket
# 获取 www.example.com 的 IPv4 地址和端口号
result = socket.getaddrinfo("www.example.com", 80, family=socket.AF_INET, type=socket.SOCK_STREAM)
for item in result:
print(item)
```
输出结果:
```
(2, 1, 6, '', ('93.184.216.34', 80))
```
可以看到,函数返回了一个 5 元组,其中第 5 个元素是一个二元组,表示 IPv4 地址和端口号。
阅读全文