Sur cette page

QDnsLookup Class

La classe QDnsLookup représente une recherche DNS. Plus d'informations...

En-tête : #include <QDnsLookup>
CMake : find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake : QT += network
Héritages : QObject

Types publics

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

Propriétés

Fonctions publiques

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

Emplacements publics

void abort()
void lookup()

Signaux

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)

Membres publics statiques

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

Description détaillée

QDnsLookup utilise les mécanismes fournis par le système d'exploitation pour effectuer des recherches DNS. Pour effectuer une recherche, vous devez spécifier un name et un type, puis invoquer le slot lookup(). Le signal finished() sera émis à la fin de l'opération.

Par exemple, vous pouvez déterminer les serveurs auxquels un client de chat XMPP doit se connecter pour un domaine donné avec :

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();
}

Une fois la requête terminée, vous pouvez traiter les résultats avec :

void MyObject::handleServers() { // Vérifier que la recherche a réussi. if (dns->error() !=::NoError) { // Vérifier que la recherche a réussi.QDnsLookup::NoError) {        qWarning("DNS lookup failed");
        dns->deleteLater() ; return; } // Gérer les résultats. const auto records =  dns->serviceRecords() ; for(const QDnsServiceRecord &record: records) { ...}  dns->deleteLater() ; }

Note : Si vous voulez simplement trouver l'adresse IP associée à un nom d'hôte, ou le nom d'hôte associé à une adresse IP, vous devriez plutôt utiliser QHostInfo.

DNS-over-TLS et données authentiques

QDnsLookup supporte le DNS-over-TLS (DoT, comme spécifié par RFC 7858) sur certaines plateformes. Cela inclut actuellement toutes les plateformes Unix où les requêtes régulières sont supportées, si le support QSslSocket est présent dans Qt. Pour savoir si le support est présent au moment de l'exécution, utilisez isProtocolSupported().

Lors de l'utilisation de DNS-over-TLS, QDnsLookup ne met en œuvre que la méthode d'authentification "Opportunistic Privacy Profile", comme décrit dans la section 4.1 de la RFC 7858. Dans ce mode, QDnsLookup (via QSslSocket) valide uniquement que le serveur présente un certificat valide pour le serveur auquel il est connecté. Les clients peuvent utiliser setSslConfiguration() pour imposer des restrictions supplémentaires et sslConfiguration() pour obtenir des informations une fois la requête terminée.

QDnsLookup demande aux serveurs DNS interrogés via TLS d'authentifier les données qu'ils renvoient. S'ils confirment que les données sont valides, la propriété authenticData sera définie comme vraie. QDnsLookup ne vérifie pas lui-même l'intégrité des données, de sorte que les applications ne doivent faire confiance à cette propriété qu'aux serveurs dont la fiabilité a été confirmée par d'autres moyens.

Données authentiques sans TLS

QDnsLookup demande des données authentiques pour tout serveur défini par setNameserver(), même si le cryptage TLS n'est pas requis. Ceci est utile pour interroger un serveur de noms de cache sur le même hôte que l'application ou sur un réseau de confiance. Bien que similaire au cas TLS, l'application est responsable de déterminer si le serveur qu'elle a choisi d'utiliser est digne de confiance, et si la connexion non chiffrée ne peut pas être altérée.

QDnsLookup obéit à la configuration du système pour demander des données authentiques sur le serveur de noms par défaut (c'est-à-dire si setNameserver() n'est pas appelé). Ceci n'est actuellement possible que sur les systèmes Linux utilisant la glibc 2.31 ou une version ultérieure. Sur tout autre système, QDnsLookup ignorera le bit AD dans l'en-tête de la requête.

Documentation des types de membres

enum QDnsLookup::Error

Indique toutes les conditions d'erreur possibles trouvées pendant le traitement de la recherche DNS.

ConstanteValeurDescription de l'erreur
QDnsLookup::NoError0aucune condition d'erreur.
QDnsLookup::ResolverError1une erreur s'est produite lors de l'initialisation du résolveur DNS du système.
QDnsLookup::OperationCancelledError2la recherche a été interrompue à l'aide de la méthode abort().
QDnsLookup::InvalidRequestError3la recherche DNS demandée n'était pas valide.
QDnsLookup::InvalidReplyError4la réponse renvoyée par le serveur n'était pas valide.
QDnsLookup::ServerFailureError5le serveur a rencontré une défaillance interne lors du traitement de la demande (SERVFAIL).
QDnsLookup::ServerRefusedError6le serveur a refusé de traiter la demande pour des raisons de sécurité ou de politique (REFUSED).
QDnsLookup::NotFoundError7le nom de domaine demandé n'existe pas (NXDOMAIN).
QDnsLookup::TimeoutError8le serveur n'a pas été joint ou n'a pas répondu à temps (depuis la version 6.6).

enum QDnsLookup::Protocol

Indique le type de serveur DNS interrogé.

ConstanteValeurDescription
QDnsLookup::Standard0DNS normal, non crypté, utilisant UDP et revenant à TCP si nécessaire (port par défaut : 53)
QDnsLookup::DnsOverTls1DNS crypté sur TLS (DoT, tel que spécifié par RFC 7858), sur TCP (port par défaut : 853)

Voir également isProtocolSupported(), nameserverProtocol, et setNameserver().

enum QDnsLookup::Type

Indique le type de recherche DNS effectuée.

ConstanteValeurDescription de la constante
QDnsLookup::A1Enregistrements d'adresses IPv4.
QDnsLookup::AAAA28Enregistrements d'adresses IPv6.
QDnsLookup::ANY255tous les enregistrements.
QDnsLookup::CNAME5enregistrements de noms canoniques.
QDnsLookup::MX15enregistrements d'échange de courrier.
QDnsLookup::NS2enregistrements de serveur de noms.
QDnsLookup::PTR12enregistrements de pointeurs.
QDnsLookup::SRV33enregistrements de service.
QDnsLookup::TLSA (since Qt 6.8)52enregistrements d'association TLS.
QDnsLookup::TXT16enregistrements de texte.

Documentation sur les propriétés

[read-only, since 6.8] authenticData : bool

Cette propriété indique si la réponse a été authentifiée par le résolveur.

QDnsLookup ne procède pas lui-même à l'authentification. Au lieu de cela, il fait confiance au serveur de noms qui a été interrogé pour effectuer l'authentification et la signaler. L'application est chargée de déterminer si les serveurs qu'elle a configurés avec setNameserver() sont dignes de confiance ; si aucun serveur n'a été défini, QDnsLookup obéit à la configuration du système pour ce qui est de savoir si les réponses doivent être dignes de confiance.

Cette propriété peut être définie même si error() indique qu'une erreur de résolution s'est produite.

Cette propriété a été introduite dans Qt 6.8.

Fonctions d'accès :

bool isAuthenticData() const

Signal Notifier :

void finished()

Voir aussi setNameserver() et nameserverProtocol().

[read-only] error : Error

Cette propriété contient le type d'erreur qui s'est produite si la recherche DNS a échoué, ou NoError.

Fonctions d'accès :

QDnsLookup::Error error() const

Signal du notificateur :

void finished()

[read-only] errorString : QString

Cette propriété contient une description lisible par l'homme de l'erreur si la recherche DNS a échoué.

Fonctions d'accès :

QString errorString() const

Signal du notificateur :

void finished()

[bindable] name : QString

Remarque : Cette propriété prend en charge les liaisons QProperty.

Cette propriété contient le nom à rechercher.

Si le nom à rechercher est vide, QDnsLookup tentera de résoudre le domaine racine du DNS. Cette requête est généralement effectuée lorsque QDnsLookup::type est défini sur NS.

Remarque : le nom sera codé à l'aide d'IDNA, ce qui signifie qu'il ne convient pas pour interroger les enregistrements SRV compatibles avec la spécification DNS-SD.

Fonctions d'accès :

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

Signal de notification :

void nameChanged(const QString &name)

[bindable] nameserver : QHostAddress

Remarque : Cette propriété prend en charge les liaisons QProperty.

Cette propriété contient le serveur de noms à utiliser pour la recherche DNS.

Fonctions d'accès :

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)

Signal de notification :

void nameserverChanged(const QHostAddress &nameserver)

[bindable, since 6.6] nameserverPort : quint16

Remarque : Cette propriété prend en charge les liaisons QProperty.

Cette propriété contient le numéro de port du serveur de noms à utiliser pour la recherche DNS.

La valeur 0 indique que QDnsLookup doit utiliser le port par défaut de nameserverProtocol().

Remarque : la définition du numéro de port à une valeur autre que la valeur par défaut (53) peut entraîner l'échec de la résolution du nom, en fonction des limitations du système d'exploitation et des pare-feu, si le serveur de noms nameserverProtocol() doit être utilisé QDnsLookup::Standard. Notamment, l'API Windows utilisée par QDnsLookup n'est pas en mesure de gérer des numéros de port alternatifs.

Cette propriété a été introduite dans Qt 6.6.

Fonctions d'accès :

quint16 nameserverPort() const
void setNameserverPort(quint16 port)

Notificateur signal :

void nameserverPortChanged(quint16 port)

[bindable, since 6.8] nameserverProtocol : Protocol

Note : Cette propriété prend en charge les liaisons QProperty.

Cette propriété contient le protocole à utiliser lors de l'envoi de la requête DNS

Cette propriété a été introduite dans Qt 6.8.

Fonctions d'accès :

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

Notifier signal :

void nameserverProtocolChanged(QDnsLookup::Protocol protocol)

Voir aussi isProtocolSupported().

[bindable] type : Type

Remarque : Cette propriété prend en charge les liaisons QProperty.

Cette propriété indique le type de recherche DNS.

Fonctions d'accès :

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

Signal du notificateur :

void typeChanged(QDnsLookup::Type type)

Member Function Documentation

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

Construit un objet QDnsLookup et définit parent comme objet parent.

La propriété type est remplacée par défaut par QDnsLookup::A.

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

Construit un objet QDnsLookup pour les objets type et name et définit parent comme objet parent.

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

Construit un objet QDnsLookup pour émettre une requête pour name du type d'enregistrement type, en utilisant le serveur DNS nameserver fonctionnant sur le port DNS par défaut, et définit parent comme l'objet parent.

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

Construit un objet QDnsLookup pour émettre une requête pour name du type d'enregistrement type, en utilisant le serveur DNS nameserver fonctionnant sur le port port, et définit parent comme l'objet parent.

Remarque : la définition du numéro de port à une valeur autre que la valeur par défaut (53) peut entraîner l'échec de la résolution du nom, en fonction des limitations du système d'exploitation et des pare-feux, si le serveur nameserverProtocol() à utiliser QDnsLookup::Standard. Notamment, l'API Windows utilisée par QDnsLookup n'est pas en mesure de gérer des numéros de port alternatifs.

Cette fonction a été introduite dans Qt 6.6.

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

Construit un objet QDnsLookup pour émettre une requête pour name du type d'enregistrement type, en utilisant le serveur DNS nameserver fonctionnant sur le port port, et définit parent comme l'objet parent.

La requête sera envoyée en utilisant protocol, si elle est prise en charge. Utilisez isProtocolSupported() pour vérifier s'il est pris en charge.

Remarque : la définition d'un numéro de port autre que la valeur par défaut (53) peut entraîner l'échec de la résolution de noms, en fonction des limitations du système d'exploitation et des pare-feux, si le serveur nameserverProtocol() doit être utilisé QDnsLookup::Standard. Notamment, l'API Windows utilisée par QDnsLookup n'est pas en mesure de gérer des numéros de port alternatifs.

Cette fonction a été introduite dans Qt 6.8.

[virtual noexcept] QDnsLookup::~QDnsLookup()

Détruit l'objet QDnsLookup.

Il n'y a aucun risque à supprimer un objet QDnsLookup même s'il n'est pas terminé, vous ne recevrez simplement jamais ses résultats.

[slot] void QDnsLookup::abort()

Abandonne l'opération de recherche DNS.

Si la recherche est déjà terminée, ne fait rien.

QList<QDnsDomainNameRecord> QDnsLookup::canonicalNameRecords() const

Renvoie la liste des enregistrements de noms canoniques associés à cette recherche.

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

Renvoie le numéro de port standard (par défaut) pour le protocole protocol.

Cette fonction a été introduite dans Qt 6.8.

Voir aussi isProtocolSupported().

[signal] void QDnsLookup::finished()

Ce signal est émis lorsque le traitement de la réponse est terminé.

Note : Signal de notification pour les propriétés authenticData, error, et errorString.

QList<QDnsHostAddressRecord> QDnsLookup::hostAddressRecords() const

Renvoie la liste des enregistrements d'adresses d'hôtes associés à cette recherche.

bool QDnsLookup::isFinished() const

Indique si la réponse est terminée ou si elle a été interrompue.

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

Retourne vrai si les requêtes DNS utilisant protocol sont supportées par QDnsLookup.

Cette fonction a été introduite dans Qt 6.8.

Voir aussi nameserverProtocol.

[slot] void QDnsLookup::lookup()

Effectue la recherche DNS.

Le signal finished() est émis à la fin de l'opération.

QList<QDnsMailExchangeRecord> QDnsLookup::mailExchangeRecords() const

Renvoie la liste des enregistrements d'échange de courrier associés à cette recherche.

Les enregistrements sont triés conformément à la RFC 5321. Si vous les utilisez pour vous connecter à des serveurs, vous devez donc les essayer dans l'ordre où ils sont répertoriés.

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

Ce signal est émis lorsque le site de recherche name change. name est le nouveau nom du site de recherche.

Note : Signal de notification pour la propriété name.

QList<QDnsDomainNameRecord> QDnsLookup::nameServerRecords() const

Renvoie la liste des enregistrements du serveur de noms associés à cette recherche.

QList<QDnsDomainNameRecord> QDnsLookup::pointerRecords() const

Renvoie la liste des enregistrements de pointeurs associés à cette recherche.

QList<QDnsServiceRecord> QDnsLookup::serviceRecords() const

Renvoie la liste des enregistrements de service associés à cette recherche.

Les enregistrements sont triés conformément à la RFC 2782. Si vous les utilisez pour vous connecter à des serveurs, vous devez donc les essayer dans l'ordre de la liste.

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

Définit le serveur de noms à nameserver et le port à port.

Remarque : la définition d'un numéro de port autre que la valeur par défaut (53) peut entraîner l'échec de la résolution de noms, en fonction des limitations du système d'exploitation et des pare-feu, si le serveur de noms nameserverProtocol() doit être utilisé QDnsLookup::Standard. Notamment, l'API Windows utilisée par QDnsLookup n'est pas en mesure de gérer des numéros de port alternatifs.

Note : Fonction de définition de la propriété nameserver.

Cette fonction a été introduite dans Qt 6.6.

Voir aussi QDnsLookup::nameserver et QDnsLookup::nameserverPort.

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

Définit l'adresse sslConfiguration à utiliser pour les connexions DNS-over-TLS sortantes.

Cette fonction a été introduite dans Qt 6.8.

Voir aussi sslConfiguration() et QSslSocket::setSslConfiguration().

QSslConfiguration QDnsLookup::sslConfiguration() const

Renvoie la configuration SSL actuelle.

Voir aussi setSslConfiguration().

QList<QDnsTextRecord> QDnsLookup::textRecords() const

Renvoie la liste des enregistrements de texte associés à cette recherche.

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

Renvoie la liste des enregistrements d'association TLS associés à cette recherche.

Selon les normes relatives à l'authentification des entités nommées basée sur le DNS (DANE), ce champ doit être ignoré et ne doit pas être utilisé pour vérifier l'authenticité d'un serveur donné si l'authenticité de la réponse DNS ne peut pas elle-même être confirmée. Voir isAuthenticData() pour plus d'informations.

Cette fonction a été introduite dans Qt 6.8.

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

Ce signal est émis lorsque le type de consultation type change. type est le nouveau type de consultation.

Note : Signal de notification pour la propriété 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.