PySide6.QtNetwork.QDnsLookup

class QDnsLookup

QDnsLookup 类表示一个DNS查找。更多

PySide6.QtNetwork.QDnsLookup 的继承图

概要

属性

方法

插槽

信号

静态函数

注意

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

详细描述

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

QDnsLookup 使用操作系统提供的机制来执行DNS查找。要执行查找,您需要指定一个nametype,然后调用lookup()槽。完成后将发出finished()信号。

例如,您可以确定XMPP聊天客户端应连接到哪个服务器以获取给定域:

def lookupServers(self):

    # Create a DNS lookup.
    dns = QDnsLookup(self)
    dns.finished.connect(self.handleServers)
    # Find the XMPP servers for gmail.com
    dns.setType(QDnsLookup.SRV)
    dns.setName("_xmpp-client._tcp.gmail.com")
    dns.lookup()

请求完成后,您可以使用以下方式处理结果:

def handleServers(self):

    # Check the lookup succeeded.
    if dns.error() != QDnsLookup.NoError:
        qWarning("DNS lookup failed")
        dns.deleteLater()
        return

    # Handle the results.
    records = dns.serviceRecords()
    for record in records:
        ...

    dns.deleteLater()

注意

如果您只是想查找与主机名关联的IP地址,或与IP地址关联的主机名,您应该使用QHostInfo

基于TLS的DNS和真实数据

QDnsLookup 在某些平台上支持DNS-over-TLS(DoT,由RFC 7858指定)。目前包括所有支持常规查询的Unix平台,如果Qt中存在QSslSocket支持。要查询运行时是否支持,请使用isProtocolSupported()

当使用DNS-over-TLS时,QDnsLookup仅实现了RFC 7858第4.1节中描述的“机会隐私配置文件”认证方法。在此模式下,QDnsLookup(通过QSslSocket)仅验证服务器提供的证书是否对连接的服务器有效。客户端可以使用setSslConfiguration()来施加额外的限制,并在查询完成后使用sslConfiguration()获取信息。

QDnsLookup 将请求通过TLS查询的DNS服务器对其返回的数据进行认证。如果它们确认数据有效,authenticData 属性将被设置为true。QDnsLookup 本身不验证数据的完整性,因此应用程序应仅在已通过其他方式确认可信的服务器上信任此属性。

没有TLS的真实数据

QDnsLookup 请求任何使用 setNameserver() 设置的服务器获取真实数据,即使不需要TLS加密。这在查询与应用程序在同一主机上或受信任网络上的缓存名称服务器时非常有用。虽然与TLS情况类似,但应用程序有责任确定其选择使用的服务器是否可信,以及未加密的连接是否无法被篡改。

QDnsLookup 遵循系统配置,在默认的域名服务器上请求真实数据(即,如果未调用 setNameserver())。目前仅在使用了 glibc 2.31 或更高版本的 Linux 系统上支持此功能。在其他任何系统上,QDnsLookup 将忽略查询头中的 AD 位。

class Error

指示在处理DNS查找过程中发现的所有可能的错误条件。

常量

描述

QDnsLookup.NoError

没有错误条件。

QDnsLookup.ResolverError

初始化系统的DNS解析器时出错。

QDnsLookup.OperationCancelledError

查找已通过使用abort()方法中止。

QDnsLookup.InvalidRequestError

请求的DNS查找无效。

QDnsLookup.InvalidReplyError

服务器返回的回复无效。

QDnsLookup.ServerFailureError

服务器在处理请求时遇到内部故障(SERVFAIL)。

QDnsLookup.ServerRefusedError

服务器出于安全或策略原因拒绝处理请求(REFUSED)。

QDnsLookup.NotFoundError

请求的域名不存在(NXDOMAIN)。

QDnsLookup.TimeoutError

服务器未到达或未及时回复(自6.6版本起)。

class Type

指示执行的DNS查找类型。

常量

描述

QDnsLookup.A

IPv4地址记录。

QDnsLookup.AAAA

IPv6地址记录。

QDnsLookup.ANY

任何记录。

QDnsLookup.CNAME

规范名称记录。

QDnsLookup.MX

邮件交换记录。

QDnsLookup.NS

名称服务器记录。

QDnsLookup.PTR

指针记录。

QDnsLookup.SRV

服务记录。

QDnsLookup.TLSA

TLS关联记录。

QDnsLookup.TXT

文本记录。

class Protocol

指示正在查询的DNS服务器类型。

常量

描述

QDnsLookup.Standard

常规的、未加密的DNS,使用UDP并在必要时回退到TCP(默认端口:53)

QDnsLookup.DnsOverTls

通过TLS加密的DNS(DoT,如RFC 7858所规定),通过TCP(默认端口:853)

在版本6.8中添加。

注意

当使用from __feature__ import true_property时,属性可以直接使用,否则通过访问器函数使用。

property authenticDataᅟ: bool

此属性保存解析器是否已验证回复。

QDnsLookup 本身不执行身份验证。相反,它信任被查询的名称服务器来执行身份验证并报告结果。应用程序负责确定通过setNameserver()配置的任何服务器是否可信;如果没有设置服务器,QDnsLookup 将遵循系统配置来决定是否信任响应。

即使error()指示解析器发生错误,也可以设置此属性。

Access functions:
property errorᅟ: QDnsLookup.Error

此属性保存DNS查找失败时发生的错误类型,或NoError ..

Access functions:
property errorStringᅟ: str

此属性保存DNS查找失败时的人类可读错误描述。

Access functions:
property nameᅟ: str

此属性保存要查找的名称。

如果要查找的名称为空,QDnsLookup 将尝试解析DNS的根域。该查询通常使用type设置为NS来执行。

注意

名称将使用IDNA进行编码,这意味着它不适合查询与DNS-SD规范兼容的SRV记录。

Access functions:
property nameserverᅟ: QHostAddress

此属性保存用于DNS查找的域名服务器。

Access functions:
property nameserverPortᅟ: int

此属性保存用于DNS查找的名称服务器的端口号。

值为0表示QDnsLookup应使用nameserverProtocol()的默认端口。

注意

将端口号设置为默认值(53)以外的任何值可能会导致名称解析失败,这取决于操作系统限制和防火墙,如果要使用的nameserverProtocol()Standard。值得注意的是,QDnsLookup使用的Windows API无法处理备用端口号。

Access functions:
property nameserverProtocolᅟ: QDnsLookup.Protocol

此属性保存发送DNS查询时使用的协议。

另请参阅

isProtocolSupported()

Access functions:
property typeᅟ: QDnsLookup.Type

此属性保存DNS查找的类型。

Access functions:
__init__([parent=None])
Parameters:

父对象QObject

构造一个QDnsLookup对象,并将parent设置为父对象。

type 属性将默认为 A

__init__(type, name[, parent=None])
Parameters:

为给定的typename构造一个QDnsLookup对象,并将parent设置为父对象。

__init__(type, name, nameserver[, parent=None])
Parameters:

构造一个QDnsLookup对象,以使用运行在默认DNS端口上的DNS服务器nameserver,对记录类型typename发出查询,并将parent设置为父对象。

__init__(type, name, nameserver, port[, parent=None])
Parameters:

构造一个QDnsLookup对象,以使用运行在端口port上的DNS服务器nameserver,对记录类型typename发出查询,并将parent设置为父对象。

注意

将端口号设置为默认值(53)以外的任何值可能会导致名称解析失败,这取决于操作系统限制和防火墙,如果要使用的nameserverProtocol()Standard。值得注意的是,QDnsLookup使用的Windows API无法处理备用端口号。

__init__(type, name, protocol, nameserver[, port=0[, parent=None]])
Parameters:

构造一个QDnsLookup对象,以使用运行在端口port上的DNS服务器nameserver,对记录类型typename发出查询,并将parent设置为父对象。

如果支持,查询将使用protocol发送。使用isProtocolSupported()来检查是否支持。

注意

将端口号设置为默认值(53)以外的任何值可能会导致名称解析失败,这取决于操作系统限制和防火墙,如果要使用的nameserverProtocol()Standard。值得注意的是,QDnsLookup使用的Windows API无法处理备用端口号。

abort()

中止DNS查找操作。

如果查找已经完成,则不执行任何操作。

canonicalNameRecords()
Return type:

QDnsDomainNameRecord的列表

返回与此查找关联的规范名称记录列表。

static defaultPortForProtocol(protocol)
Parameters:

协议Protocol

Return type:

整数

返回协议 protocol 的标准(默认)端口号。

另请参阅

isProtocolSupported()

error()
Return type:

错误

属性 errorᅟ 的获取器。

errorString()
Return type:

字符串

属性 errorStringᅟ 的获取器。

finished()

当回复完成处理时,会发出此信号。

属性 errorᅟ 的通知信号。

hostAddressRecords()
Return type:

QDnsHostAddressRecord 的列表

返回与此查找关联的主机地址记录列表。

isAuthenticData()
Return type:

布尔

属性 authenticDataᅟ 的获取器。

isFinished()
Return type:

布尔

返回回复是否已完成或被中止。

static isProtocolSupported(protocol)
Parameters:

协议Protocol

Return type:

布尔

如果使用protocol的DNS查询在QDnsLookup中受支持,则返回true。

另请参阅

nameserverProtocol

lookup()

执行DNS查找。

当完成时,会发出finished()信号。

mailExchangeRecords()
Return type:

QDnsMailExchangeRecord 的列表

返回与此查找关联的邮件交换记录列表。

记录根据RFC 5321进行排序,因此如果您使用它们连接到服务器,应按列出的顺序尝试它们。

name()
Return type:

字符串

另请参阅

setName()

获取属性 nameᅟ 的Getter。

nameChanged(name)
Parameters:

name – str

当查找 name 发生变化时,会发出此信号。name 是新的查找名称。

属性 nameᅟ 的通知信号。

nameServerRecords()
Return type:

QDnsDomainNameRecord的列表

返回与此查找相关联的名称服务器记录列表。

nameserver()
Return type:

QHostAddress

另请参阅

setNameserver()

属性 nameserverᅟ 的获取器。

nameserverChanged(nameserver)
Parameters:

名称服务器QHostAddress

属性 nameserverᅟ 的通知信号。

nameserverPort()
Return type:

整数

另请参阅

setNameserverPort()

获取属性 nameserverPortᅟ 的值。

nameserverPortChanged(port)
Parameters:

端口 – int

属性 nameserverPortᅟ 的通知信号。

nameserverProtocol()
Return type:

协议

获取属性 nameserverProtocolᅟ 的Getter。

nameserverProtocolChanged(protocol)
Parameters:

协议Protocol

属性 nameserverProtocolᅟ 的通知信号。

pointerRecords()
Return type:

QDnsDomainNameRecord的列表

返回与此查找关联的指针记录列表。

serviceRecords()
Return type:

QDnsServiceRecord 的列表

返回与此查找相关的服务记录列表。

记录根据RFC 2782进行排序,因此如果您使用它们连接到服务器,应按列出的顺序尝试它们。

setName(name)
Parameters:

name – str

另请参阅

name()

属性 nameᅟ 的设置器。

setNameserver(nameserver)
Parameters:

名称服务器QHostAddress

属性 nameserverᅟ 的设置器。

setNameserver(nameserver, port)
Parameters:

将名称服务器设置为 nameserver,并将端口设置为 port

注意

将端口号设置为默认值(53)以外的任何值可能会导致名称解析失败,这取决于操作系统限制和防火墙,如果要使用的nameserverProtocol()Standard。值得注意的是,QDnsLookup使用的Windows API无法处理备用端口号。

另请参阅

nameserver nameserverPort

setNameserver(protocol, nameserver[, port=0])
Parameters:
setNameserverPort(port)
Parameters:

端口 – int

另请参阅

nameserverPort()

属性 nameserverPortᅟ 的设置器。

setNameserverProtocol(protocol)
Parameters:

协议Protocol

另请参阅

nameserverProtocol()

属性 nameserverProtocolᅟ 的设置器。

setSslConfiguration(sslConfiguration)
Parameters:

sslConfigurationQSslConfiguration

设置用于出站DNS-over-TLS连接的sslConfiguration

setType(arg__1)
Parameters:

arg__1类型

另请参阅

type()

属性 typeᅟ 的设置器。

sslConfiguration()
Return type:

QSslConfiguration

返回当前的SSL配置。

另请参阅

setSslConfiguration()

textRecords()
Return type:

QDnsTextRecord 的列表

返回与此查找关联的文本记录列表。

tlsAssociationRecords()
Return type:

QDnsTlsAssociationRecord 的列表

返回与此查找关联的TLS关联记录列表。

根据与基于DNS的命名实体认证(DANE)相关的标准,如果DNS回复的真实性本身无法确认,则应忽略此字段,并且不得用于验证给定服务器的真实性。有关更多信息,请参见isAuthenticData()

type()
Return type:

类型

另请参阅

setType()

属性 typeᅟ 的获取器。

typeChanged(type)
Parameters:

类型Type

当查找type发生变化时,会发出此信号。type是新的查找类型。

属性 typeᅟ 的通知信号。