QDnsLookup Class

QDnsLookupクラスは、DNSルックアップを表します。詳細...

Header: #include <QDnsLookup>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
Inherits: 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)
(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

パブリック・スロット

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ルックアップを実行します。ルックアップを実行するには、nametype を指定し、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();
}

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

void MyObject::handleServers()
{
    // Check the lookup succeeded.
    if (dns->error() != QDnsLookup::NoError) {
        qWarning("DNS lookup failed");
        dns->deleteLater();
        return;
    }

    // Handle the results.
    const auto records = dns->serviceRecords();
    for (const QDnsServiceRecord &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は、TLS暗号化が要求されない場合でも、setNameserver()で設定されたサーバーのAuthentic Dataを要求する。これは、アプリケーションと同じホストや信頼できるネットワーク上にあるキャッシュネームサーバーに問い合わせるときに便利です。TLSの場合と似ていますが、アプリケーションは、使用するサーバーが信頼できるかどうか、暗号化されていない接続が改ざんできないかどうかを判断する責任があります。

QDnsLookupはシステム設定に従い、デフォルトのネームサーバーにAuthentic Dataを要求する(つまり、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::Standard0UDPを使用し、必要に応じてTCPにフォールバックする通常の暗号化されていないDNS(デフォルトポート:53)
QDnsLookup::DnsOverTls1TCP上でTLS(RFC 7858で規定されているDoT)上で暗号化されたDNS(デフォルトポート: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 : const bool

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

QDnsLookup は自分自身では認証を行わない。その代わりに、認証を実行し、それを報告するために問い合わせを受けた ネームサーバーを信頼する。アプリケーションは、 () で設定したサーバーが信頼できるかどうかを判断する責任を負う。サーバーが設定されていない場合、 は応答を信頼すべきかどうかに関するシステム設定に従う。setNameserver QDnsLookup

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

このプロパティは Qt 6.8 で導入されました。

アクセス関数です:

bool isAuthenticData() const

Notifier シグナル:

void finished()

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

[read-only] error : const Error

このプロパティは、DNS ルックアップに失敗した場合に発生したエラーのタイプを保持します。NoError

アクセス関数:

QDnsLookup::Error error() const

ノーティファイア・シグナル:

void finished()

[read-only] errorString : const QString

このプロパティは、DNS検索が失敗した場合に、人間が読めるエラーの説明を保持する。

アクセス関数:

QString errorString() const

ノーティファイアシグナル:

void finished()

[bindable] name : QString

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

このプロパティは、検索する名前を保持する。

検索する名前が空の場合、QDnsLookup は DNS のルートドメインの解決を試みる。このクエリは通常、QDnsLookup::typeNS に設定して実行される。

: この名前はIDNAを使用してエンコードされるので、DNS-SD仕様と互換性の あるSRVレコードを問い合わせるのには適さない。

[bindable] nameserver : QHostAddress

: このプロパティはQProperty バインディングをサポートする。

このプロパティは、DNS検索に使用するネームサーバーを保持する。

[bindable, since 6.6] nameserverPort : quint16

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

このプロパティは、DNS検索に使用するネームサーバーのポート番号を保持する。

値0は、QDnsLookupnameserverProtocol()のデフォルトポートを使用することを示す。

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

このプロパティは Qt 6.6 で導入されました。

[bindable, since 6.8] nameserverProtocol : Protocol

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

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

このプロパティは Qt 6.8 で導入されました。

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

[bindable] type : Type

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

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

メンバ関数 ドキュメント

[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 を使用して、レコード・タイプtypename に対するクエリを発行する QDnsLookup オブジェクトを構築し、親オブジェクトとしてparent を設定します。

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

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

注: ポート番号をデフォルト(53)以外の値に設定すると、使用するnameserverProtocol() がQDnsLookup::Standard の場合、オペレーティング・システムの制限やファイアウォールによっては、名前解決に失敗することがある。特に、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 を使用して、レコード・タイプtypename に対するクエリを発行する QDnsLookup オブジェクトを構築し、親オブジェクトとしてparent を設定します。

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

注意: ポート番号を既定値(53)以外の値に設定すると、オペレーティング・システムの 制限やファイアウォールによっては、名前解決に失敗することがある(使用するnameserverProtocol() がQDnsLookup::Standard の場合)。特に、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)

protocol を使用する DNS クエリがQDnsLookup でサポートされている場合、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 に設定します。

注: ポート番号をデフォルト(53)以外の値に設定すると、オペレーティングシステムの 制限やファイアウォールによっては、名前解決に失敗することがある。nameserverProtocol ()を使用する場合は、QDnsLookup::Standard 。特に、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-based Authentication of Named Entities (DANE)に関する標準によると、このフィールドは 無視されるべきであり、DNSリプライの真正性が確認できない場合は、 指定されたサーバーの真正性の確認に使用してはならない。詳細はisAuthenticData() を参照してください。

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

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

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

注: プロパティtype に対するノーティファイア・シグナルです。

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。