netutils

与网络相关的实用程序和辅助函数。

oslo_utils.netutils.escape_ipv6(address)

如果地址是 IPv6,则用方括号转义 IP 地址

参数:

address (string) – 要选择性转义的地址

返回值:

字符串

在版本 3.29.0 中添加。

oslo_utils.netutils.get_ipv6_addr_by_EUI64(prefix, mac)

使用 EUI-64 规范计算 IPv6 地址。

此方法使用 RFC2373 中解释的 EUI-64 寻址方案计算 IPv6 地址。

参数:
  • prefix – IPv6 前缀。

  • mac – IEEE 802 48 位 MAC 地址。

返回值:

成功时返回 IPv6 地址。

引发:

ValueError, TypeError – 对于任何无效输入。

1.4 版本中添加。

oslo_utils.netutils.get_mac_addr_by_ipv6(ipv6, dialect=<class 'netaddr.strategy.eui48.mac_unix_expanded'>)

从基于接口标识符的 IPv6 地址中提取 MAC 地址。

例如,从 MAC 生成的链路本地地址 (fe80::/10)。

参数:
  • ipv6 – 作为 netaddr.IPAddress() 对象的基于接口标识符 (即,主要是 MAC) 的 IPv6 地址。

  • dialect – 返回对象的 netaddr 语法。默认为 netaddr.mac_unix_expanded。

返回值:

一个 netaddr.EUI() 对象作为 MAC 地址。

请参阅: * https://tools.ietf.org/html/rfc4291#appendix-A * https://tools.ietf.org/html/rfc4291#section-2.5.6

在版本 4.3.0 中添加。

oslo_utils.netutils.get_my_ipv4()

返回本地机器的实际 ipv4。

此代码通过向互联网上的某个知名地址发送流量来确定将使用哪个源地址。在这种情况下,使用了 RFC5737 中的 IP,但具体的地址并不重要。实际上没有发送任何流量。

在版本 1.1 中添加。

在版本 1.2.1 中更改: 如果不存在默认接口,则返回 '127.0.0.1'

oslo_utils.netutils.get_my_ipv6()

返回本地机器的实际 IPv6 地址。

此代码通过向互联网上的某个知名地址发送流量来确定将使用哪个源地址。在这种情况下,使用了 RFC3849 中的 IPv6,但具体的地址并不重要。实际上没有发送任何流量。

在版本 6.1 中添加: 如果不存在默认接口,则返回 '::1'

oslo_utils.netutils.get_noscope_ipv6(address)

如果存在,则获取 IPv6 地址并删除范围。

参数:

address (string) – 要更改的值

返回值:

字符串

oslo_utils.netutils.is_ipv6_enabled()

检查平台上的 IPv6 支持是否已启用。

此 API 将查看平台的 proc 条目,以确定平台上 IPv6 支持的状态。

返回值:

如果平台具有 IPv6 支持,则返回 True;否则返回 False。

1.4 版本中添加。

oslo_utils.netutils.is_valid_cidr(address)

验证地址是否表示有效的 CIDR 地址。

参数:

address (string) – 要验证的值

返回值:

bool

在版本 3.8 中添加。

oslo_utils.netutils.is_valid_icmp_code(code)

验证 ICMP 代码是否有效。

参数:

code – ICMP code 字段可以是有效的整数或 None

返回值:

bool

ICMP code 字段可以是 None 或有效的整数,其值为 0 到 255(包括 255)。

oslo_utils.netutils.is_valid_icmp_type(type)

验证 ICMP 类型是否有效。

参数:

type – ICMP type 字段只能是有效的整数

返回值:

bool

ICMP type 字段可以是有效的整数,其值为 0 到 255(包括 255)。

oslo_utils.netutils.is_valid_ip(address)

验证地址是否表示有效的 IP 地址。

参数:

address (string) – 要验证的值

返回值:

bool

在版本 1.1 中添加。

oslo_utils.netutils.is_valid_ipv4(address, strict=True)

验证地址是否表示有效的 IPv4 地址。

参数:
  • address (string) – 要验证的值

  • strict – 标志,允许用户将验证限制为呈现格式 ( a.b.c.d) 的 IP 地址,而不是地址格式 ( a.b.c.d, a.b.c, a.b, a)。

返回值:

bool

在版本 1.1 中添加。

在版本 4.8.0 中更改: 允许将验证限制为呈现格式 ( a.b.c.d) 的 IP 地址,而不是地址格式 ( a.b.c.d, a.b.c, a.b, a)。

oslo_utils.netutils.is_valid_ipv6(address)

验证地址是否表示有效的 IPv6 地址。

参数:

address (string) – 要验证的值

返回值:

bool

在版本 1.1 中添加。

oslo_utils.netutils.is_valid_ipv6_cidr(address)

验证地址是否表示有效的 IPv6 CIDR 地址。

参数:

address (string) – 要验证的地址

返回值:

如果地址有效,则返回 true;否则返回 false

在版本 3.17 中添加。

oslo_utils.netutils.is_valid_mac(address)

验证 MAC 地址的格式。

检查 MAC 地址是否有效并包含六个八位字节。仅接受冒号分隔的格式。

参数:

address – 要验证的 MAC 地址。

返回值:

如果有效,则返回 True。如果无效,则返回 False。

在版本 3.17 中添加。

oslo_utils.netutils.is_valid_port(port)

验证端口是否表示有效的端口号。

端口可以是有效的整数,其值为 0 到 65535(包括 65535)。

在版本 1.1.1 中添加。

oslo_utils.netutils.parse_host_port(address, default_port=None)

将字符串解释为 host:port 对。

如果伴随端口,则 IPv6 地址必须转义,否则会产生歧义:2001:db8:85a3::8a2e:370:7334 表示 [2001:db8:85a3::8a2e:370:7334] 和 [2001:db8:85a3::8a2e:370]:7334。

>>> parse_host_port('server01:80')
('server01', 80)
>>> parse_host_port('server01')
('server01', None)
>>> parse_host_port('server01', default_port=1234)
('server01', 1234)
>>> parse_host_port('[::1]:80')
('::1', 80)
>>> parse_host_port('[::1]')
('::1', None)
>>> parse_host_port('[::1]', default_port=1234)
('::1', 1234)
>>> parse_host_port('2001:db8:85a3::8a2e:370:7334', default_port=1234)
('2001:db8:85a3::8a2e:370:7334', 1234)
>>> parse_host_port(None)
(None, None)
oslo_utils.netutils.set_tcp_keepalive(sock, tcp_keepalive=True, tcp_keepidle=None, tcp_keepalive_interval=None, tcp_keepalive_count=None)

设置 tcp keepalive 参数的值

如果用户希望这样做,此函数将配置 tcp keepalive 参数。

参数:
  • tcp_keepalive – 布尔值,启用或禁用 tcp_keepalive。如果用户不确定,则应为 True,并且将使用默认值。

  • tcp_keepidle – 在开始发送 keepalive 探测之前等待的时间

  • tcp_keepalive_interval – 一旦超过初始等待时间,连续探测之间的时间间隔

  • tcp_keepalive_count – 在终止连接之前发送的探测次数

oslo_utils.netutils.urlsplit(url, scheme='', allow_fragments=True)

使用 urlparse.urlsplit() 解析 URL,拆分查询和片段。此函数在需要时弥补了 Python issue9374

参数与 urlparse.urlsplit() 相同。