Auf dieser Seite

QDnsLookup Class

Die Klasse „QDnsLookup“ stellt eine DNS-Abfrage dar. Mehr dazu...

Header: #include <QDnsLookup>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
Erbt von: 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)
void setNameserver(const QHostAddress &nameserver)
void setNameserver(QDnsLookup::Protocol protocol, const QHostAddress &nameserver, quint16 port = 0)
(since 6.6) void setNameserver(const QHostAddress &nameserver, quint16 port)
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)

Ausführliche Beschreibung

QDnsLookup nutzt die vom Betriebssystem bereitgestellten Mechanismen, um DNS-Lookups durchzuführen. Um ein Lookup durchzuführen, müssen Sie einen „ name “ und einen „ type “ angeben und anschließend den Slot „ lookup()“ aufrufen. Das Signal „ finished()“ wird nach Abschluss des Vorgangs ausgelöst.

Beispielsweise können Sie mit folgendem Code ermitteln, mit welchen Servern sich ein XMPP-Chat-Client für eine bestimmte Domain 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 abgeschlossen ist, können Sie die Ergebnisse wie folgt verarbeiten:

void MyObject::handleServers()
{
    // Prüfen, ob die Abfrage erfolgreich war.
    if (dns->error() != QDnsLookup::NoError) {
        qWarning("DNS lookup failed");
        dns->deleteLater();
        return;
    }

    // Ergebnisse verarbeiten.
    const auto records = dns->serviceRecords();
    for (const QDnsServiceRecord&record: records) {
        ...
    }
    dns->deleteLater();
}

Hinweis: Wenn Sie lediglich die mit einem Hostnamen verknüpften IP-Adressen oder den mit einer IP-Adresse verknüpften Hostnamen ermitteln möchten, sollten Sie stattdessen QHostInfo verwenden.

DNS-over-TLS und authentifizierte Daten

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

Bei der Verwendung von DNS-over-TLS implementiert QDnsLookup nur die Authentifizierungsmethode „Opportunistic Privacy Profile“, wie in RFC 7858, Abschnitt 4.1, beschrieben. In diesem Modus überprüft QDnsLookup (über ` QSslSocket`) lediglich, ob der Server ein Zertifikat vorlegt, das für den Server gültig ist, mit dem eine Verbindung hergestellt wird. Clients können ` setSslConfiguration()` verwenden, um zusätzliche Einschränkungen festzulegen, und ` sslConfiguration()`, um nach Abschluss der Abfrage Informationen abzurufen.

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 überprüft 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.

Authentifizierte Daten ohne TLS

QDnsLookup fordert authentifizierte Daten für jeden Server an, für den „ setNameserver()“ gesetzt ist, auch wenn keine TLS-Verschlüsselung erforderlich ist. Dies ist nützlich bei der Abfrage eines Caching-Nameservers auf demselben Host wie die Anwendung oder in einem vertrauenswürdigen Netzwerk. Ähnlich wie im TLS-Fall ist die Anwendung dafür verantwortlich, festzustellen, ob der von ihr ausgewählte Server vertrauenswürdig ist und ob die unverschlüsselte Verbindung nicht manipuliert werden kann.

QDnsLookup hält sich an die Systemkonfiguration, um „Authentic Data“ beim 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 Abfrage-Header.

Dokumentation zum Mitgliedstyp

enum QDnsLookup::Error

Zeigt alle möglichen Fehlerzustände an, die bei der Verarbeitung der DNS-Abfrage festgestellt wurden.

KonstanteWertBeschreibung
QDnsLookup::NoError0Kein Fehlerzustand.
QDnsLookup::ResolverError1Es ist ein Fehler bei der Initialisierung des DNS-Resolvers des Systems aufgetreten.
QDnsLookup::OperationCancelledError2Die Abfrage 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::ServerFailureError5Beim Verarbeiten der Anfrage ist beim Server ein interner Fehler aufgetreten (SERVFAIL).
QDnsLookup::ServerRefusedError6Der Server hat die Bearbeitung der Anfrage aus Sicherheits- oder Richtliniengründen abgelehnt (REFUSED).
QDnsLookup::NotFoundError7Der angeforderte Domainname existiert nicht (NXDOMAIN).
QDnsLookup::TimeoutError8Der Server war nicht erreichbar 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 ausweicht (Standardport: 53)
QDnsLookup::DnsOverTls1Verschlüsseltes 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-Abfrage an.

KonstanteWertBeschreibung
QDnsLookup::A1IPv4-Adressdatensätze.
QDnsLookup::AAAA28IPv6-Adressdatensätze.
QDnsLookup::ANY255beliebige Datensätze.
QDnsLookup::CNAME5Kanonische Namensdatensätze.
QDnsLookup::MX15Mail-Exchange-Einträge.
QDnsLookup::NS2Namensserver-Einträge.
QDnsLookup::PTR12Pointer-Einträge.
QDnsLookup::SRV33Dienst-Einträge.
QDnsLookup::TLSA (since Qt 6.8)52TLS-Verbindungsdatensätze.
QDnsLookup::TXT16Text-Einträge.

Dokumentation zu Eigenschaften

[read-only, since 6.8] authenticData : bool

Diese Eigenschaft gilt unabhängig davon, ob die Antwort vom Resolver authentifiziert wurde.

QDnsLookup führt die Authentifizierung nicht selbst durch. Stattdessen vertraut sie darauf, dass der abgefragte Nameserver die Authentifizierung durchführt und das Ergebnis meldet. Die Anwendung ist dafür verantwortlich, festzustellen, ob die mit ` setNameserver()` konfigurierten Server vertrauenswürdig sind; wurde kein Server festgelegt, richtet sich ` QDnsLookup ` nach der Systemkonfiguration hinsichtlich der Vertrauenswürdigkeit von Antworten.

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

Diese Aufzählung wurde in Qt 6.8 eingeführt.

Zugriffsfunktionen:

bool isAuthenticData() const

Notifier-Signal:

void finished()

Siehe auch setNameserver() und nameserverProtocol().

[read-only] error : Error

Diese Eigenschaft enthält den Typ des aufgetretenen Fehlers, falls die DNS-Abfrage fehlgeschlagen ist, oder den Wert „ NoError “.

Zugriffsfunktionen:

QDnsLookup::Error error() const

Benachrichtigungssignal:

void finished()

[read-only] errorString : QString

Diese Eigenschaft enthält eine für Menschen lesbare Beschreibung des Fehlers, falls die DNS-Abfrage fehlgeschlagen ist.

Zugriffsfunktionen:

QString errorString() const

Benachrichtigungssignal:

void finished()

[bindable] name : QString

Hinweis: Diese Eigenschaft unterstützt „ QProperty “-Bindungen.

Diese Eigenschaft enthält den zu suchenden Namen.

Ist der zu suchende Name leer, versucht „ QDnsLookup “, die Stammdomäne des DNS aufzulösen. Diese Abfrage wird in der Regel mit der Einstellung „ QDnsLookup::type “ auf „ NS “ durchgeführt.

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

Zugriffsfunktionen:

QString name() const
void setName(const QString &name)

Benachrichtigungssignal:

void nameChanged(const QString &name)

[bindable] nameserver : QHostAddress

Hinweis: Diese Eigenschaft unterstützt „ QProperty “-Bindungen.

Diese Eigenschaft enthält den Nameserver, der für die DNS-Abfrage verwendet werden soll.

Zugriffsfunktionen:

QHostAddress nameserver() const
void setNameserver(const QHostAddress &nameserver)
void setNameserver(QDnsLookup::Protocol protocol, const QHostAddress &nameserver, quint16 port = 0)
void setNameserver(const QHostAddress &nameserver, quint16 port)

Benachrichtigungssignal:

void nameserverChanged(const QHostAddress &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-Abfrage verwendet werden soll.

Der Wert 0 bedeutet, dass „ QDnsLookup “ den Standardport für den „ nameserverProtocol “ () verwenden soll.

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

Diese Aufzählung wurde in Qt 6.6 eingeführt.

Zugriffsfunktionen:

quint16 nameserverPort() const
void setNameserverPort(quint16 port)

Notifier-Signal:

void nameserverPortChanged(quint16 port)

[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 werden soll

Diese Aufzählung wurde in Qt 6.8 eingeführt.

Zugriffsfunktionen:

QDnsLookup::Protocol nameserverProtocol() const
void setNameserverProtocol(QDnsLookup::Protocol protocol)

Notifier-Signal:

void nameserverProtocolChanged(QDnsLookup::Protocol protocol)

Siehe auch ` isProtocolSupported()`.

[bindable] type : Type

Hinweis: Diese Eigenschaft unterstützt „ QProperty “-Bindungen.

Diese Eigenschaft gibt den Typ der DNS-Abfrage an.

Zugriffsfunktionen:

QDnsLookup::Type type() const
void setType(QDnsLookup::Type)

Benachrichtigungssignal:

void typeChanged(QDnsLookup::Type type)

Dokumentation zu den Mitgliedsfunktionen

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

Erstellt ein QDnsLookup-Objekt und legt „ parent “ als übergeordnetes Objekt fest.

Die Eigenschaft „ type “ ist standardmäßig auf „ QDnsLookup::A “ gesetzt.

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

Erstellt ein QDnsLookup-Objekt für die angegebenen Werte „ type “ und „ name “ und legt „ parent “ als übergeordnetes Objekt fest.

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

Erstellt ein QDnsLookup-Objekt, um eine Abfrage für name vom Datensatztyp „ type “ über den DNS-Server nameserver, der auf dem Standard-DNS-Port läuft, auszuführen, und legt parent als übergeordnetes Objekt fest.

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

Erstellt ein QDnsLookup-Objekt, um eine Abfrage für name vom Datensatztyp type über den DNS-Server nameserver, der auf Port port läuft, auszuführen, und legt parent als übergeordnetes Objekt fest.

Hinweis: Die Einstellung der Portnummer auf einen anderen Wert als den Standardwert (53) kann je nach Betriebssystembeschränkungen und Firewalls zu einem Fehlschlagen der Namensauflösung führen, wenn die zu verwendende nameserverProtocol() die Form QDnsLookup::Standard hat. Insbesondere ist die von QDnsLookup verwendete Windows-API 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)

Erstellt ein QDnsLookup-Objekt, um eine Abfrage für name vom Datensatztyp type über den DNS-Server nameserver, der auf Port port läuft, auszuführen, und legt parent als übergeordnetes Objekt fest.

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

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

Diese Funktion wurde in Qt 6.8 eingeführt.

[virtual noexcept] QDnsLookup::~QDnsLookup()

Löscht das QDnsLookup -Objekt.

Es ist unbedenklich, ein „ QDnsLookup “-Objekt zu löschen, auch wenn es noch nicht abgeschlossen ist; Sie erhalten lediglich niemals dessen Ergebnisse.

[slot] void QDnsLookup::abort()

Bricht den DNS-Lookup-Vorgang ab.

Wenn die Abfrage bereits abgeschlossen ist, wird nichts unternommen.

QList<QDnsDomainNameRecord> QDnsLookup::canonicalNameRecords() const

Gibt die Liste der kanonischen Namensdatensätze zurück, die dieser Suche zugeordnet 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 ausgesendet, wenn die Verarbeitung der Antwort abgeschlossen ist.

Hinweis: Notifier -Signal für die Eigenschaften „ authenticData “, „ error “ und „ errorString “.

QList<QDnsHostAddressRecord> QDnsLookup::hostAddressRecords() const

Gibt die Liste der mit dieser Abfrage verbundenen Hostadressdatensätze zurück.

bool QDnsLookup::isFinished() const

Gibt zurück, ob die Antwort abgeschlossen wurde 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-Abfrage durch.

Nach Abschluss des Vorgangs wird das Signal „ finished()“ ausgelöst.

QList<QDnsMailExchangeRecord> QDnsLookup::mailExchangeRecords() const

Gibt die Liste der mit dieser Suche verknüpften Mail-Exchange-Einträge zurück.

Die Einträge sind gemäß RFC 5321 sortiert. Wenn Sie sie daher für die Verbindung zu Servern verwenden, sollten Sie sie in der Reihenfolge ausprobieren, in der sie aufgeführt sind.

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

Dieses Signal wird ausgelöst, wenn sich der Lookup- name ändert. „ name “ ist der neue Name des Lookups.

Hinweis: Benachrichtigungssignal für die Eigenschaft „ name “.

QList<QDnsDomainNameRecord> QDnsLookup::nameServerRecords() const

Gibt die Liste der mit dieser Suche verbundenen Nameserver-Einträge zurück.

QList<QDnsDomainNameRecord> QDnsLookup::pointerRecords() const

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

QList<QDnsServiceRecord> QDnsLookup::serviceRecords() const

Gibt die Liste der mit dieser Abfrage verknüpften Dienstdatensätze zurück.

Die Einträge sind gemäß RFC 2782 sortiert. Wenn Sie sie also für die Verbindung zu Servern verwenden, sollten Sie sie in der Reihenfolge ausprobieren, in der sie aufgeführt sind.

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

Legt den Nameserver auf nameserver und den Port auf port fest.

Hinweis: Die Einstellung der Portnummer auf einen anderen Wert als den Standardwert (53) kann je nach Betriebssystembeschränkungen und Firewalls zu Fehlern bei der Namensauflösung führen, wenn der zu verwendende nameserverProtocol() auf QDnsLookup::Standard gesetzt wird. Insbesondere ist die von QDnsLookup verwendete Windows-API 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 den „ sslConfiguration “ fest, der für ausgehende DNS-over-TLS-Verbindungen verwendet werden soll.

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 Textdatensätze zurück, die dieser Suche zugeordnet sind.

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

Gibt die Liste der TLS-Assoziationsdatensätze zurück, die mit dieser Abfrage verknüpft sind.

Gemäß den Standards zur DNS-basierten Authentifizierung benannter 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. Weitere Informationen finden Sie unter isAuthenticData().

Diese Funktion wurde in Qt 6.8 eingeführt.

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

Dieses Signal wird ausgelöst, wenn sich die Nachschlage type ändert. type ist der neue Nachschlagetyp.

Hinweis: Benachrichtigungssignal für die Eigenschaft „ type “.

© 2026 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.