QDnsLookup Class
QDnsLookup クラスは、DNS 検索を表します。詳細...
| ヘッダー: | #include <QDnsLookup> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
| 継承元: | QObject |
- 継承されたメンバーを含むすべてのメンバーの一覧
- QDnsLookupは、ネットワークプログラミングAPIの一部です。
パブリック型
| 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 | 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::NoError | 0 | エラー状態はありません。 |
QDnsLookup::ResolverError | 1 | システムの DNS リゾルバの初期化中にエラーが発生しました。 |
QDnsLookup::OperationCancelledError | 2 | abort() メソッドを使用して、ルックアップが中止されました。 |
QDnsLookup::InvalidRequestError | 3 | 要求された DNS 検索が無効でした。 |
QDnsLookup::InvalidReplyError | 4 | サーバーから返された応答が無効でした。 |
QDnsLookup::ServerFailureError | 5 | サーバーはリクエストの処理中に内部エラーが発生しました (SERVFAIL)。 |
QDnsLookup::ServerRefusedError | 6 | セキュリティまたはポリシーの理由により、サーバーがリクエストの処理を拒否しました (REFUSED)。 |
QDnsLookup::NotFoundError | 7 | 要求されたドメイン名が存在しません (NXDOMAIN)。 |
QDnsLookup::TimeoutError | 8 | サーバーに接続できなかったか、時間内に応答がありませんでした(バージョン 6.6 以降)。 |
enum QDnsLookup::Protocol
クエリの対象となるDNSサーバーの種類を示します。
| 定数 | 値 | 説明 |
|---|---|---|
QDnsLookup::Standard | 0 | 通常の、暗号化されていない DNS。UDP を使用し、必要に応じて TCP にフォールバックします(デフォルトのポート:53)。 |
QDnsLookup::DnsOverTls | 1 | TCP 上で TLS による暗号化 DNS (RFC 7858 で規定された DoT) (デフォルトポート: 853) |
関連項目: isProtocolSupported()、nameserverProtocol 、およびsetNameserver()を参照してください 。
enum QDnsLookup::Type
実行されたDNS検索の種類を示します。
| 定数 | 値 | 説明 |
|---|---|---|
QDnsLookup::A | 1 | IPv4 アドレスレコード。 |
QDnsLookup::AAAA | 28 | IPv6 アドレスレコード。 |
QDnsLookup::ANY | 255 | 任意のレコード。 |
QDnsLookup::CNAME | 5 | 正規名レコード。 |
QDnsLookup::MX | 15 | メール交換レコード。 |
QDnsLookup::NS | 2 | ネームサーバーレコード。 |
QDnsLookup::PTR | 12 | ポインタレコード。 |
QDnsLookup::SRV | 33 | サービスレコード。 |
QDnsLookup::TLSA (since Qt 6.8) | 52 | TLS アソシエーションレコード。 |
QDnsLookup::TXT | 16 | テキストレコード。 |
プロパティのドキュメント
[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.