QDnsLookup Class

Die Klasse QDnsLookup repräsentiert einen DNS-Lookup. Mehr...

Kopfzeile: #include <QDnsLookup>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
Vererbungen: QObject

Öffentliche Typen

enum Error { NoError, ResolverError, OperationCancelledError, InvalidRequestError, InvalidReplyError, …, TimeoutError }
enum Protocol { Standard, DnsOverTls }
enum Type { A, AAAA, ANY, CNAME, MX, …, TXT }

Eigenschaften

Öffentliche Funktionen

QDnsLookup(QObject *parent = nullptr)
QDnsLookup(QDnsLookup::Type type, const QString &name, QObject *parent = nullptr)
QDnsLookup(QDnsLookup::Type type, const QString &name, const QHostAddress &nameserver, QObject *parent = nullptr)
(since 6.6) QDnsLookup(QDnsLookup::Type type, const QString &name, const QHostAddress &nameserver, quint16 port, QObject *parent = nullptr)
(since 6.8) QDnsLookup(QDnsLookup::Type type, const QString &name, QDnsLookup::Protocol protocol, const QHostAddress &nameserver, quint16 port = 0, QObject *parent = nullptr)
virtual ~QDnsLookup()
QBindable<QString> bindableName()
QBindable<QHostAddress> bindableNameserver()
QBindable<quint16> bindableNameserverPort()
QBindable<QDnsLookup::Protocol> bindableNameserverProtocol()
QBindable<QDnsLookup::Type> bindableType()
QList<QDnsDomainNameRecord> canonicalNameRecords() const
QDnsLookup::Error error() const
QString errorString() const
QList<QDnsHostAddressRecord> hostAddressRecords() const
bool isAuthenticData() const
bool isFinished() const
QList<QDnsMailExchangeRecord> mailExchangeRecords() const
QString name() const
QList<QDnsDomainNameRecord> nameServerRecords() const
QHostAddress nameserver() const
quint16 nameserverPort() const
QDnsLookup::Protocol nameserverProtocol() const
QList<QDnsDomainNameRecord> pointerRecords() const
QList<QDnsServiceRecord> serviceRecords() const
void setName(const QString &name)
(since 6.6) void setNameserver(const QHostAddress &nameserver, quint16 port)
void setNameserver(const QHostAddress &nameserver)
void setNameserver(QDnsLookup::Protocol protocol, const QHostAddress &nameserver, quint16 port = 0)
void setNameserverPort(quint16 port)
void setNameserverProtocol(QDnsLookup::Protocol protocol)
(since 6.8) void setSslConfiguration(const QSslConfiguration &sslConfiguration)
void setType(QDnsLookup::Type)
QSslConfiguration sslConfiguration() const
QList<QDnsTextRecord> textRecords() const
(since 6.8) QList<QDnsTlsAssociationRecord> tlsAssociationRecords() const
QDnsLookup::Type type() const

Öffentliche Slots

void abort()
void lookup()

Signale

void finished()
void nameChanged(const QString &name)
void nameserverChanged(const QHostAddress &nameserver)
void nameserverPortChanged(quint16 port)
void nameserverProtocolChanged(QDnsLookup::Protocol protocol)
void typeChanged(QDnsLookup::Type type)

Statische öffentliche Mitglieder

(since 6.8) quint16 defaultPortForProtocol(QDnsLookup::Protocol protocol)
(since 6.8) bool isProtocolSupported(QDnsLookup::Protocol protocol)

Detaillierte Beschreibung

QDnsLookup verwendet die vom Betriebssystem bereitgestellten Mechanismen zur Durchführung von DNS-Lookups. Um einen Lookup durchzuführen, müssen Sie name und type angeben und dann den Slot lookup() aufrufen. Das Signal finished() wird nach Abschluss der Suche ausgegeben.

Sie können zum Beispiel bestimmen, mit welchen Servern sich ein XMPP-Chat-Client für eine bestimmte Domäne verbinden soll:

void MyObject::lookupServers()
{
    // Create a DNS lookup.
    dns = new QDnsLookup(this);
    connect(dns, &QDnsLookup::finished, this, &MyObject::handleServers);

    // Find the XMPP servers for gmail.com
    dns->setType(QDnsLookup::SRV);
    dns->setName("_xmpp-client._tcp.gmail.com");
    dns->lookup();
}

Sobald die Anfrage beendet ist, können Sie die Ergebnisse mit verarbeiten:

void MyObject::handleServers() { // Prüfen Sie, ob die Abfrage erfolgreich war. if (dns->error() != QDnsLookup::NoError) {        qWarning("DNS lookup failed");
        dns->deleteLater(); return; } // Verarbeiten der Ergebnisse. const auto records =  dns->serviceRecords(); for(const QDnsServiceRecord &record: records) { ...}  dns->deleteLater(); }

Hinweis: Wenn Sie nur die IP-Adresse(n), die mit einem Hostnamen verbunden sind, oder den Hostnamen, der mit einer IP-Adresse verbunden ist, finden wollen, sollten Sie stattdessen QHostInfo verwenden.

DNS-over-TLS und authentische Daten

QDnsLookup unterstützt DNS-over-TLS (DoT, wie in RFC 7858 beschrieben) auf einigen Plattformen. Dazu gehören derzeit alle Unix-Plattformen, auf denen reguläre Abfragen unterstützt werden, wenn QSslSocket in Qt unterstützt wird. Um abzufragen, ob die Unterstützung zur Laufzeit vorhanden ist, verwenden Sie isProtocolSupported().

Wenn DNS-over-TLS verwendet wird, implementiert QDnsLookup nur die "Opportunistic Privacy Profile"-Methode der Authentifizierung, wie in RFC 7858 Abschnitt 4.1 beschrieben. In diesem Modus prüft QDnsLookup (über QSslSocket) nur, ob der Server ein Zertifikat vorlegt, das für den Server gültig ist, zu dem eine Verbindung besteht. Clients können setSslConfiguration() verwenden, um zusätzliche Beschränkungen aufzuerlegen, und sslConfiguration(), um Informationen zu erhalten, nachdem die Abfrage abgeschlossen ist.

QDnsLookup fordert DNS-Server, die über TLS abgefragt werden, auf, die von ihnen zurückgegebenen Daten zu authentifizieren. Wenn sie bestätigen, dass die Daten gültig sind, wird die Eigenschaft authenticData auf true gesetzt. QDnsLookup verifiziert die Integrität der Daten nicht selbst, daher sollten Anwendungen dieser Eigenschaft nur bei Servern vertrauen, deren Vertrauenswürdigkeit sie auf andere Weise bestätigt haben.

Authentische Daten ohne TLS

QDnsLookup fragt Authentic Data für jeden mit setNameserver() eingestellten Server ab, auch wenn keine TLS-Verschlüsselung erforderlich ist. Dies ist nützlich, wenn ein Caching Nameserver auf dem gleichen Host wie die Anwendung oder in einem vertrauenswürdigen Netzwerk abgefragt wird. Ähnlich wie im Fall von TLS ist die Anwendung dafür verantwortlich, festzustellen, ob der von ihr gewählte Server vertrauenswürdig ist und ob die unverschlüsselte Verbindung nicht manipuliert werden kann.

QDnsLookup befolgt die Systemkonfiguration, um Authentic Data auf dem Standard-Nameserver anzufordern (d.h. wenn setNameserver() nicht aufgerufen wird). Dies wird derzeit nur auf Linux-Systemen mit glibc 2.31 oder höher unterstützt. Auf allen anderen Systemen ignoriert QDnsLookup das AD-Bit im Abfrageheader.

Dokumentation der Mitgliedstypen

enum QDnsLookup::Error

Gibt alle möglichen Fehlerbedingungen an, die bei der Verarbeitung der DNS-Suche festgestellt wurden.

KonstanteWertBeschreibung
QDnsLookup::NoError0keine Fehlerbedingung.
QDnsLookup::ResolverError1Es gab einen Fehler bei der Initialisierung des DNS-Resolvers des Systems.
QDnsLookup::OperationCancelledError2der Lookup wurde mit der Methode abort() abgebrochen.
QDnsLookup::InvalidRequestError3die angeforderte DNS-Abfrage war ungültig.
QDnsLookup::InvalidReplyError4Die vom Server zurückgegebene Antwort war ungültig.
QDnsLookup::ServerFailureError5Der Server ist bei der Verarbeitung der Anfrage auf einen internen Fehler gestoßen (SERVFAIL).
QDnsLookup::ServerRefusedError6Der Server hat die Bearbeitung der Anfrage aus Sicherheits- oder Policy-Gründen abgelehnt (REFUSED).
QDnsLookup::NotFoundError7Der angeforderte Domänenname existiert nicht (NXDOMAIN).
QDnsLookup::TimeoutError8Der Server wurde nicht erreicht oder hat nicht rechtzeitig geantwortet (seit 6.6).

enum QDnsLookup::Protocol

Gibt den Typ des DNS-Servers an, der abgefragt wird.

KonstanteWertBeschreibung
QDnsLookup::Standard0Normales, unverschlüsseltes DNS, das UDP verwendet und bei Bedarf auf TCP zurückgreift (Standardport: 53)
QDnsLookup::DnsOverTls1Verschlüsselter DNS über TLS (DoT, gemäß RFC 7858), über TCP (Standardport: 853)

Siehe auch isProtocolSupported(), nameserverProtocol, und setNameserver().

enum QDnsLookup::Type

Gibt die Art der durchgeführten DNS-Suche an.

KonstanteWertBeschreibung
QDnsLookup::A1IPv4-Adresseinträge.
QDnsLookup::AAAA28IPv6-Adresseinträge.
QDnsLookup::ANY255beliebige Datensätze.
QDnsLookup::CNAME5Einträge für kanonische Namen.
QDnsLookup::MX15Mail-Exchange-Einträge.
QDnsLookup::NS2Nameserver-Einträge.
QDnsLookup::PTR12Pointer-Einträge.
QDnsLookup::SRV33Dienst-Einträge.
QDnsLookup::TLSA (since Qt 6.8)52TLS-Zuordnungssätze.
QDnsLookup::TXT16Text-Einträge.

Dokumentation der Eigenschaften

[read-only, since 6.8] authenticData : const bool

Diese Eigenschaft gibt an, ob die Antwort durch den Resolver authentifiziert wurde.

QDnsLookup führt die Authentifizierung nicht selbst durch. Stattdessen vertraut es dem angefragten Nameserver, dass er die Authentifizierung durchführt und diese meldet. Die Anwendung ist dafür verantwortlich, festzustellen, ob alle Server, die sie mit setNameserver() konfiguriert hat, vertrauenswürdig sind; wenn kein Server gesetzt wurde, befolgt QDnsLookup die Systemkonfiguration, ob Antworten vertrauenswürdig sein sollen.

Diese Eigenschaft kann auch dann gesetzt werden, wenn error() anzeigt, dass ein Resolverfehler aufgetreten ist.

Diese Eigenschaft wurde in Qt 6.8 eingeführt.

Zugriffsfunktionen:

bool isAuthenticData() const

Notifier-Signal:

void finished()

Siehe auch setNameserver() und nameserverProtocol().

[read-only] error : const Error

Diese Eigenschaft enthält die Art des Fehlers, der aufgetreten ist, wenn der DNS-Lookup fehlgeschlagen ist, oder NoError.

Zugriffsfunktionen:

QDnsLookup::Error error() const

Benachrichtigungssignal:

void finished()

[read-only] errorString : const QString

Diese Eigenschaft enthält eine menschenlesbare Beschreibung des Fehlers, wenn der DNS-Lookup fehlgeschlagen ist.

Zugriffsfunktionen:

QString errorString() const

Benachrichtigungssignal:

void finished()

[bindable] name : QString

Hinweis: Diese Eigenschaft unterstützt QProperty Bindungen.

Diese Eigenschaft enthält den Namen, der gesucht werden soll.

Wenn der zu suchende Name leer ist, versucht QDnsLookup, die Stammdomäne des DNS aufzulösen. Diese Abfrage wird normalerweise durchgeführt, wenn QDnsLookup::type auf NS gesetzt ist.

Hinweis: Der Name wird mit IDNA kodiert, was bedeutet, dass er für die Abfrage von SRV-Einträgen, die mit der DNS-SD-Spezifikation kompatibel sind, nicht geeignet ist.

[bindable] nameserver : QHostAddress

Hinweis: Diese Eigenschaft unterstützt QProperty Bindungen.

Diese Eigenschaft enthält den für die DNS-Suche zu verwendenden Nameserver.

[bindable, since 6.6] nameserverPort : quint16

Hinweis: Diese Eigenschaft unterstützt QProperty Bindungen.

Diese Eigenschaft enthält die Portnummer des Nameservers, der für die DNS-Suche verwendet werden soll.

Der Wert 0 zeigt an, dass QDnsLookup den Standardport für nameserverProtocol verwenden soll ().

Hinweis: Die Einstellung der Portnummer auf einen anderen Wert als den Standardwert (53) kann dazu führen, dass die Namensauflösung fehlschlägt, je nach den Einschränkungen des Betriebssystems und der Firewalls, wenn der nameserverProtocol() verwendet werden soll QDnsLookup::Standard. Die von QDnsLookup verwendete Windows-API ist nicht in der Lage, alternative Portnummern zu verarbeiten.

Diese Eigenschaft wurde in Qt 6.6 eingeführt.

[bindable, since 6.8] nameserverProtocol : Protocol

Hinweis: Diese Eigenschaft unterstützt QProperty Bindungen.

Diese Eigenschaft enthält das Protokoll, das beim Senden der DNS-Abfrage verwendet wird.

Diese Eigenschaft wurde in Qt 6.8 eingeführt.

Siehe auch isProtocolSupported().

[bindable] type : Type

Hinweis: Diese Eigenschaft unterstützt QProperty Bindungen.

Diese Eigenschaft enthält den Typ des DNS-Lookups.

Dokumentation der Mitgliedsfunktionen

[explicit] QDnsLookup::QDnsLookup(QObject *parent = nullptr)

Konstruiert ein QDnsLookup-Objekt und setzt parent als übergeordnetes Objekt.

Die Eigenschaft type wird standardmäßig auf QDnsLookup::A gesetzt.

QDnsLookup::QDnsLookup(QDnsLookup::Type type, const QString &name, QObject *parent = nullptr)

Konstruiert ein QDnsLookup-Objekt für die angegebenen type und name und setzt parent als übergeordnetes Objekt.

QDnsLookup::QDnsLookup(QDnsLookup::Type type, const QString &name, const QHostAddress &nameserver, QObject *parent = nullptr)

Konstruiert ein QDnsLookup-Objekt, um eine Abfrage nach name vom Record-Typ type zu stellen, unter Verwendung des DNS-Servers nameserver, der auf dem Standard-DNS-Port läuft, und setzt parent als übergeordnetes Objekt.

[since 6.6] QDnsLookup::QDnsLookup(QDnsLookup::Type type, const QString &name, const QHostAddress &nameserver, quint16 port, QObject *parent = nullptr)

Konstruiert ein QDnsLookup-Objekt, um eine Abfrage für name vom Record-Typ type durchzuführen, wobei der DNS-Server nameserver auf dem Port port läuft, und setzt parent als übergeordnetes Objekt.

Hinweis: Wenn die Portnummer auf einen anderen Wert als den Standardwert (53) gesetzt wird, kann die Namensauflösung je nach den Beschränkungen des Betriebssystems und der Firewalls fehlschlagen, wenn der nameserverProtocol() verwendet wird QDnsLookup::Standard. Die von QDnsLookup verwendete Windows-API ist nicht in der Lage, alternative Portnummern zu verarbeiten.

Diese Funktion wurde in Qt 6.6 eingeführt.

[since 6.8] QDnsLookup::QDnsLookup(QDnsLookup::Type type, const QString &name, QDnsLookup::Protocol protocol, const QHostAddress &nameserver, quint16 port = 0, QObject *parent = nullptr)

Konstruiert ein QDnsLookup-Objekt, um eine Abfrage nach name vom Record-Typ type zu stellen, unter Verwendung des DNS-Servers nameserver, der auf Port port läuft, und setzt parent als übergeordnetes Objekt.

Die Abfrage wird über protocol gesendet, sofern dies unterstützt wird. Verwenden Sie isProtocolSupported(), um zu prüfen, ob dies unterstützt wird.

Hinweis: Wenn Sie die Portnummer auf einen anderen Wert als den Standardwert (53) setzen, kann die Namensauflösung je nach den Einschränkungen des Betriebssystems und der Firewalls fehlschlagen, wenn nameserverProtocol() verwendet wird QDnsLookup::Standard. Die von QDnsLookup verwendete Windows-API ist nicht in der Lage, alternative Portnummern zu verarbeiten.

Diese Funktion wurde in Qt 6.8 eingeführt.

[virtual noexcept] QDnsLookup::~QDnsLookup()

Zerstört das Objekt QDnsLookup.

Es ist sicher, ein QDnsLookup Objekt zu löschen, auch wenn es noch nicht fertig ist, Sie werden einfach nie seine Ergebnisse erhalten.

[slot] void QDnsLookup::abort()

Bricht den DNS-Lookup-Vorgang ab.

Wenn der Suchvorgang bereits abgeschlossen ist, wird nichts unternommen.

QList<QDnsDomainNameRecord> QDnsLookup::canonicalNameRecords() const

Gibt die Liste der kanonischen Namensdatensätze zurück, die mit dieser Abfrage verbunden sind.

[static noexcept, since 6.8] quint16 QDnsLookup::defaultPortForProtocol(QDnsLookup::Protocol protocol)

Gibt die Standard-Portnummer für das Protokoll protocol zurück.

Diese Funktion wurde in Qt 6.8 eingeführt.

Siehe auch isProtocolSupported().

[signal] void QDnsLookup::finished()

Dieses Signal wird ausgegeben, wenn die Bearbeitung der Antwort abgeschlossen ist.

Hinweis: Anzeigesignal für die Eigenschaft authenticData. Signalgebersignal für die Eigenschaft error. Meldesignal für die Eigenschaft errorString.

QList<QDnsHostAddressRecord> QDnsLookup::hostAddressRecords() const

Gibt die Liste der Hostadressdatensätze zurück, die mit dieser Abfrage verbunden sind.

bool QDnsLookup::isFinished() const

Gibt zurück, ob die Antwort beendet oder abgebrochen wurde.

[static, since 6.8] bool QDnsLookup::isProtocolSupported(QDnsLookup::Protocol protocol)

Gibt true zurück, wenn DNS-Abfragen mit protocol von QDnsLookup unterstützt werden.

Diese Funktion wurde in Qt 6.8 eingeführt.

Siehe auch nameserverProtocol.

[slot] void QDnsLookup::lookup()

Führt die DNS-Suche durch.

Das Signal finished() wird nach Abschluss der Suche ausgegeben.

QList<QDnsMailExchangeRecord> QDnsLookup::mailExchangeRecords() const

Gibt die Liste der Mail-Exchange-Datensätze zurück, die mit dieser Abfrage verbunden sind.

Die Datensätze sind nach RFC 5321 sortiert. Wenn Sie sie also für die Verbindung mit Servern verwenden, sollten Sie sie in der Reihenfolge ausprobieren, in der sie aufgelistet sind.

[signal] void QDnsLookup::nameChanged(const QString &name)

Dieses Signal wird ausgegeben, wenn sich die Nachschlagefunktion name ändert. name ist der neue Name der Nachschlagefunktion.

Hinweis: Benachrichtigungssignal für die Eigenschaft name.

QList<QDnsDomainNameRecord> QDnsLookup::nameServerRecords() const

Gibt die Liste der Nameservereinträge zurück, die mit dieser Abfrage verbunden sind.

QList<QDnsDomainNameRecord> QDnsLookup::pointerRecords() const

Gibt die Liste der mit dieser Suche verbundenen Zeigerdatensätze zurück.

QList<QDnsServiceRecord> QDnsLookup::serviceRecords() const

Gibt die Liste der Diensteinträge zurück, die mit dieser Abfrage verbunden sind.

Die Datensätze sind nach RFC 2782 sortiert. Wenn Sie also eine Verbindung zu Servern herstellen wollen, sollten Sie sie in der Reihenfolge ausprobieren, in der sie aufgelistet sind.

[since 6.6] void QDnsLookup::setNameserver(const QHostAddress &nameserver, quint16 port)

Setzt den Nameserver auf nameserver und den Port auf port.

Hinweis: Die Einstellung der Portnummer auf einen anderen Wert als den Standardwert (53) kann je nach den Einschränkungen des Betriebssystems und der Firewalls dazu führen, dass die Namensauflösung fehlschlägt, wenn der nameserverProtocol() QDnsLookup::Standard verwendet wird. Die von QDnsLookup verwendete Windows-API ist nicht in der Lage, alternative Portnummern zu verarbeiten.

Hinweis: Setter-Funktion für die Eigenschaft nameserver.

Diese Funktion wurde in Qt 6.6 eingeführt.

Siehe auch QDnsLookup::nameserver und QDnsLookup::nameserverPort.

[since 6.8] void QDnsLookup::setSslConfiguration(const QSslConfiguration &sslConfiguration)

Legt die sslConfiguration fest, die für ausgehende DNS-over-TLS-Verbindungen verwendet wird.

Diese Funktion wurde in Qt 6.8 eingeführt.

Siehe auch sslConfiguration() und QSslSocket::setSslConfiguration().

QSslConfiguration QDnsLookup::sslConfiguration() const

Gibt die aktuelle SSL-Konfiguration zurück.

Siehe auch setSslConfiguration().

QList<QDnsTextRecord> QDnsLookup::textRecords() const

Gibt die Liste der mit dieser Suche verbundenen Textsätze zurück.

[since 6.8] QList<QDnsTlsAssociationRecord> QDnsLookup::tlsAssociationRecords() const

Gibt die Liste der TLS-Zuordnungsdatensätze zurück, die mit dieser Abfrage verbunden sind.

Gemäß den Standards für die DNS-basierte Authentifizierung von benannten Entitäten (DANE) sollte dieses Feld ignoriert werden und darf nicht zur Überprüfung der Authentizität eines bestimmten Servers verwendet werden, wenn die Authentizität der DNS-Antwort selbst nicht bestätigt werden kann. Siehe isAuthenticData() für weitere Informationen.

Diese Funktion wurde in Qt 6.8 eingeführt.

[signal] void QDnsLookup::typeChanged(QDnsLookup::Type type)

Dieses Signal wird ausgegeben, wenn sich der Nachschlagetyp type ändert. type ist der neue Nachschlagetyp.

Hinweis: Meldesignal für die Eigenschaft type.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.