class QHostAddress#

QHostAddress 提供了一个 IP 地址。更多

概要#

方法#

静态函数#

注意

本文档可能包含从 C++ 自动转换为 Python 的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 创建工单的方式来告知我们。

详细描述#

此类以平台和协议无关的方式保留 IPv4 或 IPv6 地址。

QHostAddress 通常与 QTcpSocketQTcpServerQUdpSocket 一起使用来连接到主机或设置服务器。

使用 setAddress() 设置主机地址,并使用 toIPv4Address()toIPv6Address()toString() 获取地址。您可以使用 protocol() 检查类型。

注意

请注意,QHostAddress 不进行 DNS 查询。需要 QHostInfo 才能进行。

该类还支持常见的预定义地址:NullLocalHostLocalHostIPv6BroadcastAny

SpecialAddress#

常量

描述

QHostAddress.Null

空地址对象。等价于 QHostAddress() 。参见isNull()

QHostAddress.LocalHost

IPv4本机地址。等价于 QHostAddress ("127.0.0.1")。

QHostAddress.LocalHostIPv6

IPv6本机地址。等价于 QHostAddress ("::1")。

QHostAddress.Broadcast

IPv4广播地址。等价于 QHostAddress ("255.255.255.255")。

QHostAddress.AnyIPv4

IPv4任意地址。等价于 QHostAddress ("0.0.0.0")。绑定此地址的套接字仅监听IPv4接口。

QHostAddress.AnyIPv6

IPv6任意地址。等价于 QHostAddress ("::")。绑定此地址的套接字仅监听IPv6接口。

QHostAddress.Any

双栈任意地址。绑定此地址的套接字将在IPv4和IPv6接口上监听。

ConversionModeFlag#

常量

描述

QHostAddress.StrictConversion

(继承自 enum.Flag) 比较不同协议的 QHostAddress 对象时,不将IPv6地址转换为IPv4,以便它们始终被认为是不同的。

QHostAddress.ConvertV4MappedToIPv4

在比较时转换IPv4映射的IPv6地址(RFC 4291节2.5.5.2)。因此,QHostAddress ("::ffff:192.168.1.1") 将与 QHostAddress ("192.168.1.1") 相等。

QHostAddress.ConvertV4CompatToIPv4

在比较时转换IPv4兼容的IPv6地址(RFC 4291节2.5.5.1)。因此,QHostAddress ("::192.168.1.1") 将与 QHostAddress ("192.168.1.1") 相等。

QHostAddress.ConvertLocalHost

在比较时将IPv6环回地址转换为其IPv4等效地址。因此,例如,QHostAddress(《::1》)将与QHostAddress(《127.0.0.1》)相等比较。

QHostAddress.ConvertUnspecifiedAddress

所有未指定地址都将相等,即AnyIPv4AnyIPv6和Any。

QHostAddress.TolerantConversion

设置前三个标志。

另请参阅

isEqual()

PySide6.QtNetwork.QHostAddress.IPv4Protocol#
PySide6.QtNetwork.QHostAddress.IPv6Protocol#
PySide6.QtNetwork.QHostAddress.AnyIPProtocol#
PySide6.QtNetwork.QHostAddress.UnknownNetworkLayerProtocol#
__init__(address)#
参数:

addressSpecialAddress

address构建一个QHostAddress对象。

__init__()

构建一个空主机地址对象,即对一个主机或接口无效的地址。

另请参阅

clear()

__init__(ip4Addr)
参数:

ip4Addr – int

构建一个带有IPv4地址ip4Addr的主机地址对象。

__init__(address)
参数:

address – str

根据字符串address(例如,“127.0.0.1”)构造IPv4或IPv6地址。

另请参阅

setAddress()

__init__(ip6Addr)
参数:

ip6AddrQIPv6Address

__init__(copy)
参数:

复制QHostAddress

构造给定地址的副本。

clear()#

将主机地址设为null,并将协议设置为UnknownNetworkLayerProtocol .

另请参阅

Null

isBroadcast()#
返回类型:

bool

如果地址是IPv4广播地址,则返回 true,否则返回 false。IPv4广播地址是255.255.255.255。

注意,此函数对于IPv4网络的本地广播地址不返回true。对于这种情况,请使用QNetworkInterface 获取本地计算机的广播地址。

isEqual(address[, mode=QHostAddress.ConversionModeFlag.TolerantConversion])#
参数:
返回类型:

bool

如果此主机地址与给定的其他地址相同,则返回 true;否则返回 false

mode 参数控制在不同协议的地址之间执行哪些转换。如果没有提供 mode,则默认执行 TolerantConversion

另请参阅

ConversionMode operator==()

isGlobal()#
返回类型:

bool

如果地址是IPv4或IPv6全局地址,则返回true,否则返回false。全局地址是指不属于特殊用途(如回环或多播)或未来用途的地址。

请注意,IPv6唯一本地单播地址被视为全局地址(见isUniqueLocalUnicast()),IPv4地址,根据RFC 1918为本地网络保留。

还应注意的是,IPv6站点本地地址已被弃用,在新应用程序中应视为全局地址。此函数对站点本地地址也返回true。

isInSubnet(subnet, netmask)#
参数:
返回类型:

bool

如果此IP位于由网络前缀subnet和子网掩码netmask描述的子网中,则返回true

IP被认为属于子网,如果它在该子网最低和最高地址之间。在IPv4版本的情况下,最低地址是网络地址,最高地址是广播地址。

参数subnet不一定是实际的网络地址(子网的最低地址)。它可以属于那个子网的任何有效的IP。特别是,如果它与此对象的IP地址相等,此函数总是会返回true(前提是子网掩码是有效的值)。

另请参阅

parseSubnet()

isInSubnet(subnet)
参数:

subnet – .std.pairQHostAddress,int

返回类型:

bool

这是一个重载函数。

如果此IP地址在由subnet描述的子网中,则返回truesubnet成员中的QHostAddress包含网络前缀,int(第二个)成员包含子网掩码(前缀长度)。

isLinkLocal()#
返回类型:

bool

如果地址是IPv4或IPv6链路本地地址,则返回true,否则返回false

IPv4链路本地地址是169.254.0.0/16网络中的一个地址。IPv6链路本地地址是fe80::/10网络中的一个地址。有关更多信息,请参阅IANA IPv6地址空间注册表。

isLoopback()#
返回类型:

bool

返回true,如果地址是IPv6回环地址,或者任何IPv4回环地址。

isMulticast()#
返回类型:

bool

如果地址是IPv4或IPv6多播地址,则返回true,否则返回false

isNull()#
返回类型:

bool

如果此主机地址对任何主机或接口都无效,则返回true

默认构造函数创建了一个空地址。

另请参阅

Null

isPrivateUse()#
返回类型:

bool

如果地址是IPv6唯一本地单播地址或按照RFC 1918预留的IPv4本地网络地址,则返回true,否则返回false

isSiteLocal()#
返回类型:

bool

如果地址是IPv6站点本地地址,则返回true,否则返回false

IPv6站点本地地址是网络fec0::/10中的地址。有关更多信息,请参阅IANA IPv6地址空间注册表。

IPv6站点本地地址已被弃用,不应在新应用程序中依赖。新应用程序不应依赖此函数,并将站点本地地址视为与全局地址相同(这也是为什么isGlobal()也返回true的原因)。站点本地地址已被唯一本地地址(ULA)所取代。

isUniqueLocalUnicast()#
返回类型:

bool

如果地址是IPv6唯一本地单播地址,则返回true,否则返回false

IPv6唯一本地单播地址是网络fc00::/7中的地址。有关更多信息,请参阅IANA IPv6地址空间注册表。

请注意,唯一本地单播地址也被视为全局地址。RFC 4193表示,“在实际应用中,应用程序可以将这些地址视为全局作用域的地址。”只有路由器需要关心这种区别。

__ne__(address)#
参数:

addressSpecialAddress

返回类型:

bool

如果此主机地址与给定的 other 地址不同,则返回 true;否则返回 false

__ne__(address)
参数:

addressQHostAddress

返回类型:

bool

如果此主机地址与给定的 other 地址不同,则返回 true;否则返回 false

__eq__(address)#
参数:

addressSpecialAddress

返回类型:

bool

如果此主机地址与给定的其他地址相同,则返回 true;否则返回 false

__eq__(address)
参数:

addressQHostAddress

返回类型:

bool

如果此主机地址与给定的 other 地址相同,则返回 true;否则返回 false。此运算符只是调用 isEqual(other, StrictConversion)。

另请参阅

isEqual()

静态 parseSubnet(subnet)#
参数:

subnet - 字符串

返回类型:

.std.pairQHostAddress,int

解析 subnet 中包含的 IP 和子网信息,并返回该网络的网络前缀及其前缀长度。

IP 地址和子网掩码必须由斜杠 (/) 分隔。

此函数支持以下形式的参数

  • 123.123.123.123/n,其中 n 是 0 到 32 之间的任何值

  • 123.123.123.123/255.255.255.255

  • < ipv6-address >/n,其中 n 是 0 到 128 之间的任何值

对于 IPv4,此函数接受前导组件缺失的情况(即少于 4 个八位字节,例如 "192.168.1"),并且可以跟或不跟点。如果在那种情况下子网掩码也缺失,它被设置为实际通过的字节数(在上述例子中,它将是 24,对于 3 个八位字节)。

另请参阅

isInSubnet()

protocol()#
返回类型:

网络层协议

返回主机地址的网络层协议。

scopeId()#
返回类型:

字符串

返回 IPv6 地址的作用域 ID。对于 IPv4 地址,或者如果地址不包含作用域 ID,则返回空 QString。

IPv6 作用域 ID 指定了非全局 IPv6 地址的 可达性 范围,限制了地址可以使用的区域。所有 IPv6 地址都与这样的可达性作用域相关联。作用域 ID 用于区分那些不一定保证全局唯一的地址。

IPv6 指定了以下四个可达性级别

  • 节点本地:仅用于与同一接口上的服务进行通信的地址(例如,回环接口 "::1")。

  • 链路本地:本地于网络接口(链路)。对于您主机上的每个 IPv6 接口,始终有一个链路本地地址。链路本地地址("fe80...")是从本地网络适配器的 MAC 地址生成的,并且不保证其唯一性。

  • 全局:用于全局可路由地址,例如互联网上的公共服务器。

在使用IPv6连接的链路本地或站点本地地址时,必须指定作用域ID。链路本地地址的作用域ID通常与接口名称(例如,“eth0”,“en1”)或编号(例如,“1”,“2”)相同。

setAddress(address)#
参数:

addressSpecialAddress

这是一个重载函数。

设置由address指定的特殊地址。

setAddress(ip4Addr)
参数:

ip4Addr – int

设置由ip4Addr指定的IPv4地址。

setAddress(address)
参数:

address – str

返回类型:

bool

这是一个重载函数。

设置由address指定的字符串表示的IPv4或IPv6地址(例如,“127.0.0.1”)。如果成功解析地址,则返回true并设置地址;否则返回false

setAddress(ip6Addr)
参数:

ip6AddrQIPv6Address

setScopeId(id)#
参数:

id – str

将地址的IPv6作用域ID设置为id。如果地址协议不是IPv6,则此函数不执行任何操作。作用域ID可以是接口名称(如“eth0”或“en1”)或表示接口索引的整数。如果id是接口名称,QtNetwork将在调用操作系统的网络功能之前使用interfaceIndexFromName()将其转换为接口索引。

swap(other)#
参数:

otherQHostAddress

other交换此主机地址。此操作非常快速且从不失败。

toIPv4Address([ok=None])#
参数:

ok - bool

返回类型:

int

返回作为数字的IPv4地址。

例如,如果地址是 127.0.0.1,则返回的值是 2130706433(即 0x7f000001)。

如果 protocol() 是 IPv4Protocol ,或者协议是 IPv6Protocol 且 IPv6 地址是 IPv4 映射地址(RFC4291),则该值有效。在这些情况下,ok 将设置为 true。否则,它将设置为 false。

另请参阅

toString()

toIPv6Address()#
返回类型:

QIPv6Address

警告

本节包含自动从 C++ 转换为 Python 的代码片段,可能包含错误。

返回作为 Q_IPV6ADDR 结构的 IPv6 地址。该结构由 16 个无符号字符组成。

Q_IPV6ADDR addr = hostAddr.toIPv6Address()
# addr contains 16 unsigned characters
for i in range(0, 16):
    # process addr[i]

如果 protocol() 是 IPv6Protocol ,则该值有效。如果协议是 IPv4Protocol ,则地址将以 IPv4 映射 IPv6 地址的形式返回。(RFC4291)

另请参阅

toString()

toString()#
返回类型:

字符串

返回地址作为字符串。

例如,如果地址是 IPv4 地址 127.0.0.1,则返回的字符串是“127.0.0.1”。对于 IPv6,字符串格式将遵循 RFC5952 建议的格式。对于 Any ,它的 IPv4 地址将返回(“0.0.0.0”)

另请参阅

toIPv4Address()