這篇一兩年前答應了同學要放出來,結果一直忘記XD。
DNS(Domain Name System)的功能最基本就是查詢domain或ip的資訊,目前可以解析的Type有:A、NS、CNAME、SOA、PTR、MX、TXT、AAAA、LOC以及SRV。
DNS解析有兩個重點,DNS domain儲存方式並不是一般字串而已,詳細可以看DNS and BIND, 5th Edition - O'Reilly Media的第15.2章。
大概說一下:
第一個,儲存方式:
假設一個domain為「www.facebook.com」,那麼在封包裡會以表示成「\x03www\x08facebook\x03com\x00」,每一層前面一個byte表示後面的字串的長度。
第二個,壓縮:
在response封包裡,同一個domain可能會出現多次,上面講的儲存方式中的表示長度的byte,假設最高兩個bit都是1(0xc0),表示接下來一個byte是offset,這個offset是從DNS封包開頭開始算的offset,就是接下來這層domain字串的位置。
如果稍微了解過DNS會知道,每一層domain長度最大是63,這個數字剛好是八個bit扣除表達壓縮的兩個bit後的長度。
那麼還是要講一下,這個範例只是練習而已,實際上有現成的library(libresolv)可以解析DNS表頭,要拿出去實戰的工具記得還是要用現成的東西,別造輪子。
執行結果(Type A):
192.168.1.10(54884) -> 8.8.8.8(53)
Protocol DNS:
+-------------------------+-------------------------+
| Transaction ID: 633| Flags: 0x0100|
+-------------------------+-------------------------+
| Questions: 1| Answer: 0|
+-------------------------+-------------------------+
| Authority: 0| Additional: 0|
+-------------------------+-------------------------+
Questions:
Name: www.google.com
Type: A
Class: IN
8.8.8.8(53) -> 192.168.1.10(54884)
Protocol DNS:
+-------------------------+-------------------------+
| Transaction ID: 633| Flags: 0x8180|
+-------------------------+-------------------------+
| Questions: 1| Answer: 1|
+-------------------------+-------------------------+
| Authority: 0| Additional: 0|
+-------------------------+-------------------------+
Questions:
Name: www.google.com
Type: A
Class: IN
Answers:
Name: www.google.com
Type: A
Class: IN
TTL: 160
Data Length: 4
Address: 216.58.200.36
執行結果(Type NS):
192.168.1.10(49693) -> 8.8.8.8(53)
Protocol DNS:
+-------------------------+-------------------------+
| Transaction ID: 29648| Flags: 0x0100|
+-------------------------+-------------------------+
| Questions: 1| Answer: 0|
+-------------------------+-------------------------+
| Authority: 0| Additional: 0|
+-------------------------+-------------------------+
Questions:
Name: isc.org
Type: NS
Class: IN
8.8.8.8(53) -> 192.168.1.10(49693)
Protocol DNS:
+-------------------------+-------------------------+
| Transaction ID: 29648| Flags: 0x8180|
+-------------------------+-------------------------+
| Questions: 1| Answer: 4|
+-------------------------+-------------------------+
| Authority: 0| Additional: 0|
+-------------------------+-------------------------+
Questions:
Name: isc.org
Type: NS
Class: IN
Answers:
Name: isc.org
Type: NS
Class: IN
TTL: 4601
Data Length: 13
Name Server: ord.sns-pb.isc.org
Name: isc.org
Type: NS
Class: IN
TTL: 4601
Data Length: 7
Name Server: sfba.sns-pb.isc.org
Name: isc.org
Type: NS
Class: IN
TTL: 4601
Data Length: 25
Name Server: ns.isc.afilias-nst.info
Name: isc.org
Type: NS
Class: IN
TTL: 4601
Data Length: 6
Name Server: ams.sns-pb.isc.org
執行結果(Type CNAME):
192.168.1.10(49923) -> 8.8.8.8(53)
Protocol DNS:
+-------------------------+-------------------------+
| Transaction ID: 62928| Flags: 0x0100|
+-------------------------+-------------------------+
| Questions: 1| Answer: 0|
+-------------------------+-------------------------+
| Authority: 0| Additional: 0|
+-------------------------+-------------------------+
Questions:
Name: 5-edge-chat.facebook.com
Type: A
Class: IN
8.8.8.8(53) -> 192.168.1.10(49923)
Protocol DNS:
+-------------------------+-------------------------+
| Transaction ID: 62928| Flags: 0x8180|
+-------------------------+-------------------------+
| Questions: 1| Answer: 2|
+-------------------------+-------------------------+
| Authority: 0| Additional: 0|
+-------------------------+-------------------------+
Questions:
Name: 5-edge-chat.facebook.com
Type: A
Class: IN
Answers:
Name: 5-edge-chat.facebook.com
Type: CNAME
Class: IN
TTL: 1834
Data Length: 12
CNAME: star.c10r.facebook.com
Name: star.c10r.facebook.com
Type: A
Class: IN
TTL: 16
Data Length: 4
Address: 157.240.15.16
執行結果(Type SOA):
192.168.1.10(55659) -> 8.8.8.8(53)
Protocol DNS:
+-------------------------+-------------------------+
| Transaction ID: 43230| Flags: 0x0100|
+-------------------------+-------------------------+
| Questions: 1| Answer: 0|
+-------------------------+-------------------------+
| Authority: 0| Additional: 0|
+-------------------------+-------------------------+
Questions:
Name: www.google.com
Type: SOA
Class: IN
8.8.8.8(53) -> 192.168.1.10(55659)
Protocol DNS:
+-------------------------+-------------------------+
| Transaction ID: 43230| Flags: 0x8180|
+-------------------------+-------------------------+
| Questions: 1| Answer: 0|
+-------------------------+-------------------------+
| Authority: 1| Additional: 0|
+-------------------------+-------------------------+
Questions:
Name: www.google.com
Type: SOA
Class: IN
Authority:
Name: google.com
Type: SOA
Class: IN
TTL: 59
Data Length: 38
Primary Name Server: ns1.google.com
Responsible Authority's Mailbox: dns-admin.google.com
Serial Number: 190759656
Refresh Interval: 900
Retry Interval: 900
Expire Time: 1800
Minimum TTL: 60
執行結果(Type PTR):
192.168.1.10(52005) -> 8.8.8.8(53)
Protocol DNS:
+-------------------------+-------------------------+
| Transaction ID: 8319| Flags: 0x0100|
+-------------------------+-------------------------+
| Questions: 1| Answer: 0|
+-------------------------+-------------------------+
| Authority: 0| Additional: 0|
+-------------------------+-------------------------+
Questions:
Name: 8.8.8.8.in-addr.arpa
Type: PTR
Class: IN
8.8.8.8(53) -> 192.168.1.10(52005)
Protocol DNS:
+-------------------------+-------------------------+
| Transaction ID: 8319| Flags: 0x8180|
+-------------------------+-------------------------+
| Questions: 1| Answer: 1|
+-------------------------+-------------------------+
| Authority: 0| Additional: 0|
+-------------------------+-------------------------+
Questions:
Name: 8.8.8.8.in-addr.arpa
Type: PTR
Class: IN
Answers:
Name: 8.8.8.8.in-addr.arpa
Type: PTR
Class: IN
TTL: 21599
Data Length: 32
Name: google-public-dns-a.google.com
192.168.1.10(54936) -> 8.8.8.8(53)
Protocol DNS:
+-------------------------+-------------------------+
| Transaction ID: 54369| Flags: 0x0100|
+-------------------------+-------------------------+
| Questions: 1| Answer: 0|
+-------------------------+-------------------------+
| Authority: 0| Additional: 0|
+-------------------------+-------------------------+
Questions:
Name: 3.6.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.0.c.0.8.0.0.4.0.0.8.6.4.0.4.2.ip6.arpa
Type: PTR
Class: IN
8.8.8.8(53) -> 192.168.1.10(54936)
Protocol DNS:
+-------------------------+-------------------------+
| Transaction ID: 54369| Flags: 0x8180|
+-------------------------+-------------------------+
| Questions: 1| Answer: 1|
+-------------------------+-------------------------+
| Authority: 0| Additional: 0|
+-------------------------+-------------------------+
Questions:
Name: 3.6.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.0.c.0.8.0.0.4.0.0.8.6.4.0.4.2.ip6.arpa
Type: PTR
Class: IN
Answers:
Name: 3.6.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.0.c.0.8.0.0.4.0.0.8.6.4.0.4.2.ip6.arpa
Type: PTR
Class: IN
TTL: 21599
Data Length: 21
Name: tj-in-x63.1e100.net
執行結果(Type MX):
192.168.1.10(64457) -> 8.8.8.8(53)
Protocol DNS:
+-------------------------+-------------------------+
| Transaction ID: 13466| Flags: 0x0100|
+-------------------------+-------------------------+
| Questions: 1| Answer: 0|
+-------------------------+-------------------------+
| Authority: 0| Additional: 0|
+-------------------------+-------------------------+
Questions:
Name: google.com
Type: MX
Class: IN
8.8.8.8(53) -> 192.168.1.10(64457)
Protocol DNS:
+-------------------------+-------------------------+
| Transaction ID: 13466| Flags: 0x8180|
+-------------------------+-------------------------+
| Questions: 1| Answer: 5|
+-------------------------+-------------------------+
| Authority: 0| Additional: 0|
+-------------------------+-------------------------+
Questions:
Name: google.com
Type: MX
Class: IN
Answers:
Name: google.com
Type: MX
Class: IN
TTL: 599
Data Length: 17
Preference: 40
Mail Exchange: alt3.aspmx.l.google.com
Name: google.com
Type: MX
Class: IN
TTL: 599
Data Length: 9
Preference: 20
Mail Exchange: alt1.aspmx.l.google.com
Name: google.com
Type: MX
Class: IN
TTL: 599
Data Length: 9
Preference: 50
Mail Exchange: alt4.aspmx.l.google.com
Name: google.com
Type: MX
Class: IN
TTL: 599
Data Length: 9
Preference: 30
Mail Exchange: alt2.aspmx.l.google.com
Name: google.com
Type: MX
Class: IN
TTL: 599
Data Length: 4
Preference: 10
Mail Exchange: aspmx.l.google.com
執行結果(Type TXT):
192.168.1.10(64292) -> 8.8.8.8(53)
Protocol DNS:
+-------------------------+-------------------------+
| Transaction ID: 15584| Flags: 0x0100|
+-------------------------+-------------------------+
| Questions: 1| Answer: 0|
+-------------------------+-------------------------+
| Authority: 0| Additional: 0|
+-------------------------+-------------------------+
Questions:
Name: google.com
Type: TXT
Class: IN
8.8.8.8(53) -> 192.168.1.10(64292)
Protocol DNS:
+-------------------------+-------------------------+
| Transaction ID: 15584| Flags: 0x8180|
+-------------------------+-------------------------+
| Questions: 1| Answer: 2|
+-------------------------+-------------------------+
| Authority: 0| Additional: 0|
+-------------------------+-------------------------+
Questions:
Name: google.com
Type: TXT
Class: IN
Answers:
Name: google.com
Type: TXT
Class: IN
TTL: 3599
Data Length: 36
TXT Length: 35
TXT: v=spf1 include:_spf.google.com ~all
Name: google.com
Type: TXT
Class: IN
TTL: 299
Data Length: 46
TXT Length: 45
TXT: docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e
執行結果(Type AAAA):
192.168.1.10(51732) -> 8.8.8.8(53)
Protocol DNS:
+-------------------------+-------------------------+
| Transaction ID: 7567| Flags: 0x0100|
+-------------------------+-------------------------+
| Questions: 1| Answer: 0|
+-------------------------+-------------------------+
| Authority: 0| Additional: 0|
+-------------------------+-------------------------+
Questions:
Name: www.google.com
Type: AAAA
Class: IN
8.8.8.8(53) -> 192.168.1.10(51732)
Protocol DNS:
+-------------------------+-------------------------+
| Transaction ID: 7567| Flags: 0x8180|
+-------------------------+-------------------------+
| Questions: 1| Answer: 1|
+-------------------------+-------------------------+
| Authority: 0| Additional: 0|
+-------------------------+-------------------------+
Questions:
Name: www.google.com
Type: AAAA
Class: IN
Answers:
Name: www.google.com
Type: AAAA
Class: IN
TTL: 146
Data Length: 16
Address: 2404:6800:4012::2004
執行結果(Type LOC):
192.168.1.10(55335) -> 8.8.8.8(53)
Protocol DNS:
+-------------------------+-------------------------+
| Transaction ID: 31301| Flags: 0x0100|
+-------------------------+-------------------------+
| Questions: 1| Answer: 0|
+-------------------------+-------------------------+
| Authority: 0| Additional: 0|
+-------------------------+-------------------------+
Questions:
Name: local
Type: SOA
Class: IN
8.8.8.8(53) -> 192.168.1.10(55335)
Protocol DNS:
+-------------------------+-------------------------+
| Transaction ID: 31301| Flags: 0x8183|
+-------------------------+-------------------------+
| Questions: 1| Answer: 0|
+-------------------------+-------------------------+
| Authority: 1| Additional: 0|
+-------------------------+-------------------------+
Questions:
Name: local
Type: SOA
Class: IN
Authority:
Name: <root>
Type: SOA
Class: IN
TTL: 12825
Data Length: 64
Primary Name Server: a.root-servers.net
Responsible Authority's Mailbox: nstld.verisign-grs.com
Serial Number: 2018032701
Refresh Interval: 1800
Retry Interval: 900
Expire Time: 604800
Minimum TTL: 86400
執行結果(Type SRV):
192.168.1.10(56361) -> 8.8.8.8(53)
Protocol DNS:
+-------------------------+-------------------------+
| Transaction ID: 567| Flags: 0x0100|
+-------------------------+-------------------------+
| Questions: 1| Answer: 0|
+-------------------------+-------------------------+
| Authority: 0| Additional: 0|
+-------------------------+-------------------------+
Questions:
Name: _http._tcp.mxtoolbox.com
Type: SRV
Class: IN
8.8.8.8(53) -> 192.168.1.10(56361)
Protocol DNS:
+-------------------------+-------------------------+
| Transaction ID: 567| Flags: 0x8180|
+-------------------------+-------------------------+
| Questions: 1| Answer: 1|
+-------------------------+-------------------------+
| Authority: 0| Additional: 0|
+-------------------------+-------------------------+
Questions:
Name: _http._tcp.mxtoolbox.com
Type: SRV
Class: IN
Answers:
Service: _http
Protocol: _tcp
Name: mxtoolbox.com
Type: SRV
Class: IN
TTL: 3599
Data Length: 21
Priority: 10
Weight: 100
Port: 80
Target: mxtoolbox.com
Source code on Github