滲透&&探測 (之DNS協議)

  DNS 是互聯網 核心協議之一。不論是 上網瀏覽,仍是 編程開發,都須要瞭解一點它的知識。git

DNS是什麼

  DNSDomain Name System 的縮寫)的做用很是簡單,就是根據 域名 查出IP地址。你能夠把它想象成一本 巨大的電話本github

  舉例來講,若是你要訪問域名www.baidu.com,首先要經過DNS查出它的IP地址是220.181.57.216123.125.115.110shell

查詢過程

  雖然 只須要返回一個IP地址,可是DNS的查詢過程很是複雜,分紅 多個步驟編程

  工具軟件dig能夠顯示 整個查詢過程緩存

$ dig www.baidu.com
複製代碼

  上面的命令會輸出 六段 信息。安全

  • 第一段是查詢參數和統計 bash

    1

  • 第二段是查詢內容 服務器

    2

  上面結果表示,查詢域名www.baidu.comA記錄,Aaddress的縮寫。dom

  • 第三段是DNS服務器的答覆
    3

  上面結果顯示,www.baidu.com三個A記錄,即 三個IP地址294TTL值(Time to live 的縮寫),表示 緩存時間,即 600 秒以內 不用從新查詢工具

  • 第四段顯示www.baidu.comNS記錄(Name Server的縮寫),即 哪些服務器 負責管理www.baidu.comDNS記錄。
    4

  上面結果顯示www.baidu.com共有五條NS記錄,即 五個域名服務器,向其中任一臺查詢就能知道www.baidu.comIP地址是什麼。

  • 第五段是上面四個域名服務器的IP地址

    5

  • 第六段是DNS服務器的一些傳輸信息。

    6

  上面結果顯示,本機的DNS服務器是192.168.3.1,查詢端口是53DNS服務器的默認端口),以及迴應長度是271字節。

若是不想看到這麼多內容,可使用+short參數。

$ dig +short www.baidu.com
www.a.shifen.com.
115.239.211.112
115.239.210.27
複製代碼

  上面命令只返回www.baidu.com對應的 2IP地址(即A記錄)和一個CNAME(Canonical Name,後文有介紹)。

DNS服務器

  下面咱們根據前面這個例子,一步步還原,本機到底怎麼獲得域名www.baidu.comIP地址。

  首先,本機必定要知道DNS服務器的IP地址,不然上不了網。經過DNS服務器,才能知道某個域名的IP地址究竟是什麼。

dns

  DNS 服務器的IP地址,有多是 動態的,每次上網時由 網關分配,這叫作DHCP機制;也有多是事先指定的 固定地址MacOS系統裏面,DNS服務器的IP地址保存在/etc/resolv.conf文件。

  上例的DNS服務器是192.168.3.1,這是一個內網地址。有一些 公網DNS服務器,也可使用,其中最有名的就是Google8.8.8.8Level 34.2.2.2

  本機只向本身的DNS服務器查詢,dig命令有一個@參數,顯示向其餘DNS服務器查詢的結果。

$ dig @8.8.8.8 www.baidu.com
複製代碼

  上面命令指定向DNS服務器8.8.8.8查詢。

域名的層級

  DNS 服務器怎麼會知道每一個域名的IP地址呢?答案是分級查詢。

  請仔細看前面的例子,每一個域名的尾部都多了一個點。

3

  好比,域名www.baidu.com顯示爲www.baidu.com.。這不是 疏忽,而是 全部域名的尾部,實際上都有一個 根域名

  舉例來講,www.example.com真正的域名是www.example.com.root,簡寫爲www.example.com.

  由於,根域名.root對於 全部域名 都是同樣的,因此平時是 省略的

  根域名的 下一級,叫作 頂級域名top-level domain,縮寫爲TLD),好比.com.net

  再下一級叫作 次級域名second-level domain,縮寫爲SLD),好比www.example.com裏面的.example,這一級域名是用戶能夠 註冊的

  再下一級是主機名(host),好比www.example.com裏面的www,又稱爲 三級域名,這是用戶在本身的域裏面爲服務器分配的名稱,是用戶能夠 任意分配的

  總結一下,域名的層級結構以下。

主機名.次級域名.頂級域名.根域名

# 即

host.sld.tld.root
複製代碼

DNS的記錄類型

  域名IP之間的對應關係,稱爲 記錄record)。根據使用場景,記錄 能夠分紅不一樣的 類型type),前面已經看到了有 A記錄

  常見的DNS記錄類型以下:

  1. A:地址記錄(Address),返回域名指向的IP地址

  2. NS:域名服務器記錄(Name Server),返回保存 下一級域名信息的服務器地址。該記錄只能設置爲 域名,不能設置爲IP地址。

  3. MX:郵件記錄(Mail eXchange),返回接收電子郵件的服務器地址。

  4. CNAME:規範名稱記錄(Canonical Name),返回另外一個域名,即當前查詢的域名是另外一個域名的跳轉,詳見下文。

  5. PTR:逆向查詢記錄(Pointer Record),只用於從IP地址查詢域名

  通常來講,爲了服務的安全可靠,至少應該有 兩條NS記錄,而A記錄和MX記錄也能夠有多條,這樣就提供了服務的 冗餘性防止出現單點失敗

  CNAME 記錄主要用於域名的內部跳轉,爲服務器配置提供靈活性,用戶感知不到。舉例來講,www.baidu.com這個域名就是一個CNAME記錄。

$ dig www.baidu.com

...

;; ANSWER SECTION:
www.baidu.com.		1091	IN	CNAME	www.a.shifen.com.
www.a.shifen.com.	200	IN	A	115.239.211.112
www.a.shifen.com.	200	IN	A	115.239.210.27
複製代碼

  上面結果顯示,www.baidu.comCNAME記錄指向www.a.shifen.com。也就是說,用戶查詢www.baidu.com的時候,實際上返回的是www.a.shifen.comIP地址。

  這樣的 好處 是,變動服務器IP地址的時候,只要修改www.a.shifen.com這個域名就能夠了,用戶的www.baidu.com域名不用修改。

  因爲CNAME記錄就是一個替換,因此 域名 一旦設置CNAME記錄之後,就不能再設置其餘記錄了(好比A記錄和MX記錄),這是爲了 防止產生衝突。舉例來講,foo.com指向bar.com,而兩個域名各有本身的MX記錄,若是二者不一致,就會 產生問題。因爲頂級域名一般要設置MX記錄,因此通常 不容許用戶對頂級域名 設置CNAME記錄。

  PTR 記錄用於從IP地址反查域名。dig命令的-x參數用於查詢PTR記錄。

$ dig -x 192.30.252.153

...

;; ANSWER SECTION:
153.252.30.192.in-addr.arpa. 3600 IN PTR pages.github.com.
複製代碼

  上面結果顯示,192.30.252.153這臺服務器的域名是pages.github.com

  逆向查詢 的一個應用,是能夠 防止垃圾郵件,即 驗證發送郵件IP地址,是否真的有它所聲稱的域名。

  dig 命令能夠查看指定的 記錄類型

$ dig a github.com
$ dig ns github.com
$ dig mx github.com
複製代碼

其餘DNS工具

  除了dig,還有一些 其餘小工具 也可使用。

  1. host 命令

  host 命令能夠看做dig命令的簡化版本,返回當前請求域名的各類記錄。

$ host baidu.com
baidu.com has address 123.125.115.110
baidu.com has address 220.181.57.216
baidu.com mail is handled by 20 mx1.baidu.com.
baidu.com mail is handled by 20 jpmx.baidu.com.
baidu.com mail is handled by 20 mx50.baidu.com.
baidu.com mail is handled by 10 mx.maillb.baidu.com.
baidu.com mail is handled by 15 mx.n.shifen.com.
複製代碼

  host 命令也能夠用於 逆向查詢,即從IP地址查詢域名,等同於dig -x <ip>

$ host 192.30.252.153

153.252.30.192.in-addr.arpa domain name pointer pages.github.com.
複製代碼
  1. nslookup 命令

  nslookup 命令用於 互動式地查詢域名記錄

$ nslookup

> www.baidu.com
Server:		192.168.3.1
Address:	192.168.3.1#53

Non-authoritative answer:
www.baidu.com	canonical name = www.a.shifen.com.
Name:	www.a.shifen.com
Address: 115.239.211.112
Name:	www.a.shifen.com
Address: 115.239.210.27
複製代碼
  1. whois 命令

  whois 命令用來查看 域名的註冊狀況

$ whois baidu.com
複製代碼
相關文章
相關標籤/搜索