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 |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QDnsLookup ist Teil der Netzwerkprogrammierung API.
Ö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
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.
Konstante | Wert | Beschreibung |
---|---|---|
QDnsLookup::NoError | 0 | keine Fehlerbedingung. |
QDnsLookup::ResolverError | 1 | Es gab einen Fehler bei der Initialisierung des DNS-Resolvers des Systems. |
QDnsLookup::OperationCancelledError | 2 | der Lookup wurde mit der Methode abort() abgebrochen. |
QDnsLookup::InvalidRequestError | 3 | die angeforderte DNS-Abfrage war ungültig. |
QDnsLookup::InvalidReplyError | 4 | Die vom Server zurückgegebene Antwort war ungültig. |
QDnsLookup::ServerFailureError | 5 | Der Server ist bei der Verarbeitung der Anfrage auf einen internen Fehler gestoßen (SERVFAIL). |
QDnsLookup::ServerRefusedError | 6 | Der Server hat die Bearbeitung der Anfrage aus Sicherheits- oder Policy-Gründen abgelehnt (REFUSED). |
QDnsLookup::NotFoundError | 7 | Der angeforderte Domänenname existiert nicht (NXDOMAIN). |
QDnsLookup::TimeoutError | 8 | Der 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.
Konstante | Wert | Beschreibung |
---|---|---|
QDnsLookup::Standard | 0 | Normales, unverschlüsseltes DNS, das UDP verwendet und bei Bedarf auf TCP zurückgreift (Standardport: 53) |
QDnsLookup::DnsOverTls | 1 | Verschlü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.
Konstante | Wert | Beschreibung |
---|---|---|
QDnsLookup::A | 1 | IPv4-Adresseinträge. |
QDnsLookup::AAAA | 28 | IPv6-Adresseinträge. |
QDnsLookup::ANY | 255 | beliebige Datensätze. |
QDnsLookup::CNAME | 5 | Einträge für kanonische Namen. |
QDnsLookup::MX | 15 | Mail-Exchange-Einträge. |
QDnsLookup::NS | 2 | Nameserver-Einträge. |
QDnsLookup::PTR | 12 | Pointer-Einträge. |
QDnsLookup::SRV | 33 | Dienst-Einträge. |
QDnsLookup::TLSA (since Qt 6.8) | 52 | TLS-Zuordnungssätze. |
QDnsLookup::TXT | 16 | Text-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.