DNSLookup

域名查詢系統

什麼是域名

  在 Internet 上有千百萬臺主機,爲了區分這些主機,每一臺主機都被分配一個 IP 地址。但由於 IP 地址沒有實際意義且難於記憶,於是就有了域名(Domain Name)。
  域名主要是由英文字母、阿拉伯數字、“ - ” 、“ . ” 等組成,目的是爲了方便記憶和溝通一組服務器的地址(網站、電子郵件、FTP 等)。
  域名和 IP 是相互對應的,在 Internet 上專門有 DNS(域名服務器)來進行域名與 IP 的相互轉換,您在瀏覽器上輸入域名, DNS 會進行域名與 IP 的轉換,才能找到相應的服務器,打開相應的網頁。

示例的功能

  根據輸入的域名查詢IP,由於源代碼是使用命令行運行的,有點不方便,所以稍微修改了一下,下面是效果圖演示示例

代碼分析

本利中使用到的類有

  QDNSLookup類可以查詢的信息有如下幾種,

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記錄,一般指爲某個主機名或域名設置的說明,
  1. QDnsDomainNameRecord

    存儲關於域名記錄的信息,在執行名稱服務器查找時,將返回零條或多條記錄。

      // CNAME records
        foreach (const QDnsDomainNameRecord &record, dns->canonicalNameRecords())
            ret = QString("%1\t%2\tIN\tCNAME\t%3\n")
                    .arg(record.name())
                    .arg(record.timeToLive())
                    .arg(record.value());
    
     // NS records
        foreach (const QDnsDomainNameRecord &record, dns->nameServerRecords())
            ret = QString("%1\t%2\tIN\tNS\t%3\n")
                    .arg(record.name())
                    .arg(record.timeToLive())
                    .arg(record.value());
     // PTR records
        foreach (const QDnsDomainNameRecord &record, dns->pointerRecords())
            ret = QString("%1\t%2\tIN\tPTR\t%3\n")
                    .arg(record.name())
                    .arg(record.timeToLive())
                    .arg(record.value());
    
    函數 作用
    name() 返回此記錄的名稱
    timeToLive() 返回此記錄有效的持續時間(以秒爲單位)
    value() 返回此域名記錄的值
  2. QDnsHostAddressRecord

    類存儲有關主機地址記錄的信息,執行地址查找時,將返回零條或多條記錄。

       // A and AAAA records
        foreach (const QDnsHostAddressRecord &record, dns->hostAddressRecords()) {
            const char *type = (record.value().protocol() == QAbstractSocket::IPv6Protocol) ? "AAAA" : "A";
            ret = QString("%1\t%2\tIN\t%3\t%4\n")
                    .arg(record.name())
                    .arg(record.timeToLive())
                    .arg(type)
                    .arg(record.value().toString());
        }
    
    函數 作用
    name() 返回此記錄的名稱
    timeToLive() 返回此記錄有效的持續時間(以秒爲單位)
    value() 返回此主機地址記錄的值
  3. QDnsServiceRecord

    類存儲關於DNS SRV記錄的信息。在對服務執行查找時,將返回零條或多條記錄

    // SRV records
        foreach (const QDnsServiceRecord &record, dns->serviceRecords())
          	 ret = QString("%1\t%2\tIN\tSRV\t%3 %4 %5 %6\n")
                   .arg(record.name())
                   .arg(record.timeToLive())
                   .arg(record.priority())
                   .arg(record.weight())
                   .arg(record.port())
                   .arg((record.target()));
    
    函數 作用
    name() 返回此記錄的名稱
    port() 返回此服務記錄在目標主機上的端口
    priority() 返回此服務記錄的優先級。客戶端必須嘗試以編號最低的優先級與目標主機聯繫
    target() 返回此服務記錄的目標主機的域名。
    timeToLive() 返回此記錄有效的持續時間(以秒爲單位)。
    weight() 返回此服務記錄的權重。weight字段爲具有相同優先級的條目指定一個相對權重。具有較高權重的條目應該選擇具有較高概率的條目
  4. QDnsMailExchangeRecord

    類存儲關於DNS MX記錄的信息,在對服務執行查找時,將返回零條或多條記錄

     // MX records
        foreach (const QDnsMailExchangeRecord &record, dns->mailExchangeRecords())
              ret = QString("%1\t%2\tIN\tMX\t%3 %4\n")
                    .arg(record.name())
                    .arg(record.timeToLive())
                    .arg(record.preference())
                    .arg(record.exchange());
    
    函數 作用
    exchange 返回此記錄的郵件交換的域名。
    name 返回此記錄的名稱。
    preference 返回此記錄的首選項。
    timeToLive 返回此記錄有效的持續時間(以秒爲單位)。
  5. QDnsTextRecord

    類存儲關於DNS TXT記錄的信息,執行文本查找時,將返回零條或多條記錄

      // TXT records
        foreach (const QDnsTextRecord &record, dns->textRecords()) {
            QStringList values;
            foreach (const QByteArray &ba, record.values())
                values << "\"" + QString::fromLatin1(ba) + "\"";
          	ret = QString("%s\t%i\tIN\tTXT\t%s\n")
                   .arg(record.name())
                   .arg(record.timeToLive())
                   .arg(values.join(' '));
        }
    
    函數 作用
    name 返回此記錄的名稱。
    timeToLive 返回此記錄有效的持續時間(以秒爲單位)。
    value() 返回此主機地址記錄的值

如何查詢DNS

  QDnsLookup使用操作系統提供的機制來查找DNS。在進行查找時,需要指定名稱和類型,然後調用l該類的ookup()函數。在完成後將該類會發出finished()信號。

如何查詢DNS

  QDnsLookup使用操作系統提供的機制來查找DNS。在進行查找時,需要指定名稱和類型,然後調用l該類的ookup()函數。在完成後將該類會發出finished()信號。
查找dns

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章