このページでは

QDnsLookup Class

QDnsLookup クラスは、DNS 検索を表します。詳細...

ヘッダー: #include <QDnsLookup>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
継承元: QObject

パブリック型

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

プロパティ

パブリック関数

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

パブリックスロット

void abort()
void lookup()

シグナル

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)

静的パブリックメンバ

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

詳細な説明

QDnsLookupは、オペレーティングシステムが提供する仕組みを利用してDNSルックアップを実行します。ルックアップを実行するには、name とtype を指定し、lookup()スロットを呼び出す必要があります。処理が完了すると、finished()シグナルが発火します。

たとえば、特定のドメインに対してXMPPチャットクライアントがどのサーバーに接続すべきかを、次のように判断できます:

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

リクエストが完了したら、次のように結果を処理できます:

voidMyObject::handleServers()
{
    // 検索が成功したか確認する。
    if(dns->error()!=QDnsLookup::NoError) {
        qWarning("DNS lookup failed");
        dns->deleteLater();
        return;
    }

    // 結果を処理する。
    const autorecords= dns->serviceRecords();
    for(constQDnsServiceRecord&record: records) {
        ...
    }
    dns->deleteLater();
}

注: ホスト名に関連付けられたIPアドレス、またはIPアドレスに関連付けられたホスト名を単に検索したい場合は 、代わりに `QHostInfo ` を使用してください。

DNS-over-TLS および認証データ

QDnsLookupは、一部のプラットフォームでDNS-over-TLS(RFC 7858で規定されるDoT)をサポートしています。現在、QtにQSslSocket のサポートが存在する場合、通常のクエリがサポートされているすべてのUnixプラットフォームが含まれます。実行時にサポートの有無を問い合わせるには、isProtocolSupported()を使用してください。

DNS-over-TLS を使用する場合、QDnsLookup はRFC 7858のセクション 4.1 に記載されている「Opportunistic Privacy Profile」方式の認証のみを実装しています。 このモードでは、QDnsLookup(QSslSocket を通じて)は、サーバーが接続先のサーバーに対して有効な証明書を提示していることのみを検証します。クライアントは、setSslConfiguration() を使用して追加の制限を課したり、sslConfiguration() を使用してクエリ完了後に情報を取得したりすることができます。

QDnsLookupは、TLS経由でクエリを送信するDNSサーバーに対し、返されるデータの認証を行うよう要求します。サーバーがデータの有効性を確認した場合、authenticData プロパティはtrueに設定されます。QDnsLookup自体はデータの完全性を検証しないため、アプリケーションは、他の手段によって信頼性が確認されたサーバーについてのみ、このプロパティを信頼する必要があります。

TLS を使用しない場合の認証済みデータ

QDnsLookupは、setNameserver()が設定されているサーバーに対しては、TLS暗号化が不要な場合でも、認証済みデータを要求します。 これは、アプリケーションと同じホスト上、または信頼できるネットワーク上にあるキャッシュネームサーバーにクエリを送信する際に役立ちます。TLS を使用する場合と同様ですが、使用するサーバーが信頼できるかどうか、また暗号化されていない接続が改ざんされないかどうかを判断するのは、アプリケーションの責任となります。

QDnsLookupは、デフォルトのネームサーバーに対して認証データを要求するよう、システム設定に従います(つまり、setNameserver()が呼び出されていない場合)。これは現在、glibc 2.31以降を使用するLinuxシステムでのみサポートされています。その他のシステムでは、QDnsLookupはクエリヘッダー内のADビットを無視します。

メンバ型のドキュメント

enum QDnsLookup::Error

DNS 検索の処理中に検出された、考えられるすべてのエラー状態を示します。

定数値説明
QDnsLookup::NoError0エラー状態はありません。
QDnsLookup::ResolverError1システムの DNS リゾルバの初期化中にエラーが発生しました。
QDnsLookup::OperationCancelledError2abort() メソッドを使用して、ルックアップが中止されました。
QDnsLookup::InvalidRequestError3要求された DNS 検索が無効でした。
QDnsLookup::InvalidReplyError4サーバーから返された応答が無効でした。
QDnsLookup::ServerFailureError5サーバーはリクエストの処理中に内部エラーが発生しました (SERVFAIL)。
QDnsLookup::ServerRefusedError6セキュリティまたはポリシーの理由により、サーバーがリクエストの処理を拒否しました (REFUSED)。
QDnsLookup::NotFoundError7要求されたドメイン名が存在しません (NXDOMAIN)。
QDnsLookup::TimeoutError8サーバーに接続できなかったか、時間内に応答がありませんでした(バージョン 6.6 以降)。

enum QDnsLookup::Protocol

クエリの対象となるDNSサーバーの種類を示します。

定数値説明
QDnsLookup::Standard0通常の、暗号化されていない DNS。UDP を使用し、必要に応じて TCP にフォールバックします(デフォルトのポート:53)。
QDnsLookup::DnsOverTls1TCP 上で TLS による暗号化 DNS (RFC 7858 で規定された DoT) (デフォルトポート: 853)

関連項目: isProtocolSupported()、nameserverProtocol 、およびsetNameserver()を参照してください 。

enum QDnsLookup::Type

実行されたDNS検索の種類を示します。

定数値説明
QDnsLookup::A1IPv4 アドレスレコード。
QDnsLookup::AAAA28IPv6 アドレスレコード。
QDnsLookup::ANY255任意のレコード。
QDnsLookup::CNAME5正規名レコード。
QDnsLookup::MX15メール交換レコード。
QDnsLookup::NS2ネームサーバーレコード。
QDnsLookup::PTR12ポインタレコード。
QDnsLookup::SRV33サービスレコード。
QDnsLookup::TLSA (since Qt 6.8)52TLS アソシエーションレコード。
QDnsLookup::TXT16テキストレコード。

プロパティのドキュメント

[read-only, since 6.8] authenticData : bool

このプロパティは、応答がリゾルバーによって認証されたかどうかを示すものです。

QDnsLookup このプロパティ自体は認証を行いません。代わりに、クエリを送信したネームサーバーが認証を実行し、その結果を報告することを信頼します。setNameserver() で設定されたサーバーが信頼できるかどうかを判断するのはアプリケーションの責任です。サーバーが設定されていない場合、QDnsLookup は、応答を信頼すべきかどうかについてシステム設定に従います。

error() がリゾルバーエラーの発生を示している場合でも、このプロパティを設定することは可能です。

この列挙型は Qt 6.8 で導入されました。

アクセス関数:

bool isAuthenticData() const

Notifier シグナル:

void finished()

setNameserver() およびnameserverProtocol()も参照してください 。

[read-only] error : Error

このプロパティには、DNS 検索に失敗した場合に発生したエラーの種類、または `NoError` が格納されます。

アクセス関数:

QDnsLookup::Error error() const

通知シグナル:

void finished()

[read-only] errorString : QString

このプロパティには、DNS 検索に失敗した場合のエラーに関する、人間が読み取れる説明が格納されます。

アクセス関数:

QString errorString() const

通知シグナル:

void finished()

[bindable] name : QString

注:この プロパティは、QProperty バインディングに対応しています。

このプロパティには、検索対象の名前が格納されます。

検索対象の名前が空の場合、QDnsLookup はDNSのルートドメインの解決を試みます。このクエリは通常、QDnsLookup::type がNS に設定された状態で実行されます。

注: 名前は IDNA を使用してエンコードされるため、DNS-SD 仕様に準拠した SRV レコードのクエリには適していません。

アクセス関数:

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

通知シグナル:

void nameChanged(const QString &name)

[bindable] nameserver : QHostAddress

注:この プロパティは、QProperty バインディングをサポートしています。

このプロパティには、DNS 検索に使用するネームサーバーが格納されます。

アクセス関数:

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)

通知シグナル:

void nameserverChanged(const QHostAddress &nameserver)

[bindable, since 6.6] nameserverPort : quint16

注:この プロパティは、QProperty バインディングに対応しています。

このプロパティには、DNS 検索に使用するネームサーバーのポート番号が格納されます。

値が 0 の場合、QDnsLookup はnameserverProtocol() のデフォルトポートを使用することを示します。

注: 使用するnameserverProtocol() がQDnsLookup::Standard である場合、ポート番号をデフォルト (53) 以外の値に設定すると 、オペレーティングシステムの制限やファイアウォールによっては、名前解決が失敗する可能性があります。特に、QDnsLookup が使用する Windows API は、代替ポート番号を処理することができません。

この列挙型は Qt 6.6 で導入されました。

アクセス関数:

quint16 nameserverPort() const
void setNameserverPort(quint16 port)

Notifierシグナル:

void nameserverPortChanged(quint16 port)

[bindable, since 6.8] nameserverProtocol : Protocol

注:この プロパティは、QProperty バインディングをサポートしています。

このプロパティは、DNS クエリを送信する際に使用するプロトコルを保持します。

この列挙型は Qt 6.8 で導入されました。

アクセス関数:

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

通知シグナル:

void nameserverProtocolChanged(QDnsLookup::Protocol protocol)

関連項目: isProtocolSupported()。

[bindable] type : Type

注:この プロパティは、QProperty バインディングに対応しています。

このプロパティは、DNS 検索のタイプを保持します。

アクセス関数:

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

通知シグナル:

void typeChanged(QDnsLookup::Type type)

メンバ関数のドキュメント

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

QDnsLookup オブジェクトを生成し、parent を親オブジェクトとして設定します。

type プロパティのデフォルト値はQDnsLookup::A になります。

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

指定されたtype およびname に対するQDnsLookupオブジェクトを生成し、parent を親オブジェクトとして設定します。

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

デフォルトのDNSポートで動作しているDNSサーバーnameserver を使用して、レコードタイプtype のname に対するクエリを発行するQDnsLookupオブジェクトを作成し、parent を親オブジェクトとして設定します。

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

ポートport で動作している DNS サーバーnameserver を使用して、レコードタイプtype のname に対するクエリを発行する QDnsLookup オブジェクトを構築し、parent を親オブジェクトとして設定します。

注: 使用するnameserverProtocol()がQDnsLookup::Standard である場合、ポート番号をデフォルト(53)以外の値に設定すると 、オペレーティングシステムの制限やファイアウォールの設定によっては、名前解決に失敗する可能性があります。特に、QDnsLookupが使用するWindows APIでは、代替ポート番号を処理することができません。

この関数は 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)

ポートport で動作している DNS サーバーnameserver を使用して、レコードタイプtype のname に対するクエリを発行する QDnsLookup オブジェクトを構築し、parent を親オブジェクトとして設定します。

サポートされている場合は、protocol を使用してクエリが送信されます。サポートされているかどうかを確認するには、isProtocolSupported() を使用してください。

QDnsLookup::Standard注: nameserverProtocol() を使用する場合、ポート番号をデフォルト値(53)以外の値に設定すると 、オペレーティングシステムの制限やファイアウォールの設定によっては、名前解決に失敗する可能性があります。特に、QDnsLookup が使用する Windows API は、デフォルト以外のポート番号を処理できません。

この関数は Qt 6.8 で導入されました。

[virtual noexcept] QDnsLookup::~QDnsLookup()

QDnsLookup オブジェクトを破棄します。

QDnsLookup オブジェクトは、処理が完了していなくても安全に削除できます。その場合、単に結果を受け取ることができなくなるだけです。

[slot] void QDnsLookup::abort()

DNS 検索処理を中止します。

検索がすでに完了している場合は、何もしません。

QList<QDnsDomainNameRecord> QDnsLookup::canonicalNameRecords() const

このルックアップに関連付けられた正規名レコードのリストを返します。

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

プロトコル `protocol` の標準(デフォルト)ポート番号を返します。

この関数は Qt 6.8 で導入されました。

isProtocolSupported()も参照してください 。

[signal] void QDnsLookup::finished()

このシグナルは、応答の処理が完了したときに発せられます。

注: authenticData 、error 、およびerrorString のプロパティに対する通知 シグナルです。

QList<QDnsHostAddressRecord> QDnsLookup::hostAddressRecords() const

この検索に関連付けられたホストアドレスレコードのリストを返します。

bool QDnsLookup::isFinished() const

応答が完了したか、それとも中断されたかを返します。

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

QDnsLookup で、protocol を使用した DNS クエリがサポートされている場合、true を返します。

この関数は Qt 6.8 で導入されました。

nameserverProtocolも参照してください 。

[slot] void QDnsLookup::lookup()

DNS 検索を実行します。

完了時にfinished()シグナルが発信されます。

QList<QDnsMailExchangeRecord> QDnsLookup::mailExchangeRecords() const

このルックアップに関連付けられたメール交換レコードのリストを返します。

レコードはRFC 5321 に基づいてソートされているため、これらを使用してサーバーに接続する場合は、リストされている順序で試してみてください。

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

このシグナルは、ルックアップ「name 」が変更された際に発火します。「name 」は新しいルックアップ名です。

注: プロパティ `name` に対する通知 シグナルです。

QList<QDnsDomainNameRecord> QDnsLookup::nameServerRecords() const

この検索に関連付けられたネームサーバーレコードのリストを返します。

QList<QDnsDomainNameRecord> QDnsLookup::pointerRecords() const

このルックアップに関連付けられたポインタレコードのリストを返します。

QList<QDnsServiceRecord> QDnsLookup::serviceRecords() const

このルックアップに関連付けられたサービスレコードのリストを返します。

レコードはRFC 2782 に基づいてソートされているため、これらを使用してサーバーに接続する場合は、リストされている順序で試してみてください。

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

ネームサーバーをnameserver に、ポートをport に設定します。

QDnsLookup::Standard注: 使用するネームサーバー(nameserverProtocol )のポート番号をデフォルト(53)以外の値に設定すると 、オペレーティングシステムの制限やファイアウォールの設定によっては、名前解決に失敗する可能性があります。特に、QDnsLookup が使用する Windows API は、デフォルト以外のポート番号を処理できません。

注: プロパティnameserver のセッター 関数です。

この関数は Qt 6.6 で導入されました。

QDnsLookup::nameserver およびQDnsLookup::nameserverPortも参照してください 。

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

送信側のDNS-over-TLS接続に使用するsslConfiguration を設定します。

この関数は Qt 6.8 で導入されました。

sslConfiguration() およびQSslSocket::setSslConfiguration()も参照してください 。

QSslConfiguration QDnsLookup::sslConfiguration() const

現在の SSL 設定を返します。

setSslConfiguration()も参照してください 。

QList<QDnsTextRecord> QDnsLookup::textRecords() const

このルックアップに関連付けられたテキストレコードのリストを返します。

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

この検索に関連付けられた TLS アソシエーションレコードのリストを返します。

DNS ベースの命名エンティティ認証 (DANE) に関する標準規格によれば、DNS 応答自体の正当性を確認できない場合、このフィールドは無視されるべきであり、特定のサーバーの正当性を検証するために使用してはなりません。詳細については、isAuthenticData() を参照してください。

この関数は Qt 6.8 で導入されました。

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

このシグナルは、ルックアップ「type 」が変更されたときに発行されます。「type 」は新しいルックアップ型です。

注: プロパティ `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.