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)
(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() { // 조회 성공 확인 if (dns->error() != QDnsLookup::NoError) {        qWarning("DNS lookup failed");
        dns->deleteLater(); return; } // 결과를 처리합니다. const auto records =  dns->serviceRecords(); for(const QDnsServiceRecord &record: records) { ...}  dns->deleteLater(); }

참고: 단순히 호스트 이름과 연결된 IP 주소 또는 IP 주소와 연결된 호스트 이름을 찾으려면 QHostInfo 를 대신 사용해야 합니다.

DNS-over-TLS 및 인증 데이터

QDnsLookup은 일부 플랫폼에서 RFC 7858에 명시된 대로 DNS-over-TLS(DoT)를 지원합니다. 여기에는 현재 일반 쿼리가 지원되는 모든 Unix 플랫폼( QSslSocket 지원이 Qt에 있는 경우)이 포함됩니다. 런타임에 지원 여부를 쿼리하려면 isProtocolSupported()를 사용합니다.

DNS-over-TLS를 사용할 때 QDnsLookup은 RFC 7858 섹션 4.1에 설명된 대로 "기회주의 개인 정보 프로필" 인증 방법만 구현합니다. 이 모드에서 ( QSslSocket)를 통해 QDnsLookup은 서버가 연결 중인 서버에 유효한 인증서를 제공하는지 여부만 확인합니다. 클라이언트는 setSslConfiguration()를 사용하여 추가 제한을 적용하고 sslConfiguration()를 사용하여 쿼리가 완료된 후 정보를 얻을 수 있습니다.

QDnsLookup은 TLS를 통해 쿼리한 DNS 서버에 요청하여 반환하는 데이터에 대한 인증을 수행합니다. 데이터가 유효한 것으로 확인되면 authenticData 속성이 true로 설정됩니다. QDnsLookup은 자체적으로 데이터의 무결성을 확인하지 않으므로 애플리케이션은 다른 수단을 통해 신뢰할 수 있다고 확인한 서버의 이 속성만 신뢰해야 합니다.

TLS를 사용하지 않는 인증 데이터

QDnsLookup은 TLS 암호화가 필요하지 않더라도 setNameserver()로 설정된 모든 서버에 대해 인증 데이터를 요청합니다. 애플리케이션과 동일한 호스트 또는 신뢰할 수 있는 네트워크에 있는 캐싱 네임서버를 쿼리할 때 유용합니다. 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서버가 보안 또는 정책상의 이유로 요청 처리를 거부했습니다(거부됨).
QDnsLookup::NotFoundError7요청된 도메인 네임이 존재하지 않습니다(NXDOMAIN).
QDnsLookup::TimeoutError8서버에 연결되지 않았거나 제시간에 응답하지 않았습니다(6.6 이후).

enum QDnsLookup::Protocol

쿼리 중인 DNS 서버의 유형을 나타냅니다.

상수설명
QDnsLookup::Standard0일반 암호화되지 않은 DNS, UDP를 사용하며 필요에 따라 TCP로 폴백(기본 포트: 53)
QDnsLookup::DnsOverTls1암호화된 DNS over TLS(DoT, RFC 7858에 명시된 대로), TCP(기본 포트: 853)

isProtocolSupported(), nameserverProtocol, setNameserver()도 참조하세요 .

enum QDnsLookup::Type

수행된 DNS 조회 유형을 나타냅니다.

Constant설명
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

알림 신호:

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이면 nameserverProtocol()의 기본 포트를 QDnsLookup 사용해야 함을 나타냅니다.

참고: 포트 번호를 기본값(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)

주어진 typename 에 대한 QDnsLookup 객체를 구성하고 parent 를 부모 객체로 설정합니다.

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

기본 DNS 포트에서 실행 중인 DNS 서버 nameserver 를 사용하여 레코드 유형 typename 에 대한 쿼리를 실행하고 parent 를 부모 개체로 설정하는 QDnsLookup 개체를 구성합니다.

[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::nameserverQDnsLookup::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 속성에 대한 알림 신호입니다.

© 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.