本节涉及的类如下:
QDnsLookup
QDnsDomainNameRecord
QDnsHostAddressRecord
QDnsMailExchangeRecord
QDnsServiceRecord
QDnsTextRecord
DNS 是域名系统 (Domain Name System) 的缩写。
域名即我们在浏览器中输入的网址字符串。它将送到提供域名解析服务的系统中,如国内可以使用的,提供免费DNS解析服务的服务商:http://www.dnspod.cn/。它在这里会被转成目标服务器所在的IP,进而我们的浏览器可以访问服务器的资源了。
下面介绍搭建一个网站来了解DNS。
如果你要尝试的话,可申请使用免费的域名TK(http://my.dot.tk/),免费的域名解析服务(https://www.dnspod.cn),及一些免费的空间,用于存储你的网站文件。
三者具备后,在dot.tk中,我申请了个haiying.tk域名,其设置如下:
custom DNS即用我们自定义的DNS服务,下面两个Host Name都是dnspod.cn提供给我们的DNS解析服务商的地址,填入后,当访问haiying.tk时,它会送到dnspod上解析。
在dnspod上,我们为这个域名设置如下:
第一条,A记录是最为常用的记录类型了,它用于指定网站空间的IP地址。
第四条记录,当我们访问"www.haiying.tk"时,它使用别名记录,跳转到hao123首页。
TTL值全称是“生存时间(Time To Live)”,简单的说它表示DNS记录在DNS服务器上缓存时间。
一般网站仅需要这样设置,但对于支持邮件功能及其它特殊的,需要添加其它记录。
当添加记录,指向各所需填的空时,它给我们的提示如下:
我只能带你了解到这了,更为细节的东东,自己百度吧。
——————————————————————————————————————————————————————————————————
本节最重要的类QDnsLookup,通过其setName(QString) 函数,设置域名,然后可以执行其槽函数void lookup()即可实现查询,查询结果即它的各种“记录”分为几种,Qt为每种结果都提供了一个类来描述它们,即上面列表中除QDnsLookup外的几个,通过这些类可以获取相关信息。
查看QDnsLookup:
public fns:
- QDnsLookup(QObject * parent = 0)
- QDnsLookup(Type type, const QString & name, QObject * parent = 0)
- ~QDnsLookup()
-
- void setType(QDnsLookup::Type)
- void setName(const QString & name)
-
- Type type() const
- QString name() const
-
- Error error() const
- QString errorString() const
- bool isFinished() const
-
- QList<QDnsDomainNameRecord> canonicalNameRecords() const
- QList<QDnsHostAddressRecord> hostAddressRecords() const
- QList<QDnsMailExchangeRecord> mailExchangeRecords() const
- QList<QDnsDomainNameRecord> nameServerRecords() const
- QList<QDnsDomainNameRecord> pointerRecords() const
- QList<QDnsServiceRecord> serviceRecords() const
- QList<QDnsTextRecord> textRecords() const
1,enum QDnsLookup::Type
Constant | Value | Description |
---|
QDnsLookup::A | 1 | IPv4地址记录 |
QDnsLookup::AAAA | 28 | IPv6 地址记录 |
QDnsLookup::ANY | 255 | 任何记录 |
QDnsLookup::CNAME | 5 | 别名记录(该记录值为另一个域名) |
QDnsLookup::MX | 15 | 邮件交换记录 |
QDnsLookup::NS | 2 | 域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析。 |
QDnsLookup::PTR | 12 | PTR记录,是电子邮件系统中的邮件交换记录的一种; |
QDnsLookup::SRV | 33 | 记录了哪台计算机提供了哪个服务 |
QDnsLookup::TXT | 16 | TXT记录,一般指为某个主机名或域名设置的说明, |
Public Slots
Signals
来自Qt project文档的简短代码帮助你理解它的基本使用:
- void MyObject::lookupServers()
- {
-
- dns = new QDnsLookup(this);
- connect(dns, SIGNAL(finished()),
- this, SLOT(handleServers()));
-
-
- 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;
- }
-
-
- foreach (const QDnsServiceRecord &record, dns->serviceRecords()) {
-
- }
- dns->deleteLater();
- }
QDnsHostAddressRecord的函数有如下几个:
- QString name() const
- QHostAddress value() const
- quint32 timeToLive() const
- void swap(QDnsHostAddressRecord & other)
- QDnsHostAddressRecord & operator=(const QDnsHostAddressRecord & other)
以下按上面示例再写一个小例子,以查找我们的haiying.tk相关信息。
- #include "dialog.h"
- #include "ui_dialog.h"
- #include <QDebug>
- #include <QDnsHostAddressRecord>
- #include <QHostAddress>
- Dialog::Dialog(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::Dialog)
- {
- ui->setupUi(this);
- dns = new QDnsLookup(this);
- connect(dns, SIGNAL(finished()),
- this, SLOT(handleServers()));
-
- dns->setType(QDnsLookup::A);
- dns->setName("haiying.tk");
- dns->lookup();
- }
-
- Dialog::~Dialog()
- {
- delete ui;
- }
-
- void Dialog::handleServers()
- {
- if (dns->error() != QDnsLookup::NoError) {
- qWarning("DNS lookup failed");
- dns->deleteLater();
- return;
- }
- foreach (const QDnsHostAddressRecord &record, dns->hostAddressRecords()) {
- qDebug()<<record.name();
- qDebug()<<record.value();
- qDebug()<<record.timeToLive();
- }
- dns->deleteLater();
- }
输出如下:
"haiying.tk"//这里只返回第一条IP记录信息,"www.haiying.tk"的解析就会是别名信息了
QHostAddress( "198.148.94.24" )
600
"f1g1ns2.dnspod.net"
QHostAddress( "122.225.217.191" )
600
"f1g1ns2.dnspod.net"
QHostAddress( "180.153.162.150" )
600
"f1g1ns2.dnspod.net"
QHostAddress( "182.140.167.188" )
600
"f1g1ns2.dnspod.net"
QHostAddress( "112.90.143.29" )
600
与我们对它这个域名的DNS解析设置是一致的。而且可以看到,
f1g1ns2.dnspod.net这个解析服务提供商有多个IP,
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。