iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 17
0

DNS是基於UDP的一項網路應用服务。它由一個将domain name和ip address相互映射的一個分散式資料庫,能够使人更方便地访问網際網路
和http一樣,應用層的header和data比較不好解析,但是至少DNS比http有跡可循,首先,DNS的header長度固定為12,前面第二、三層和UDP的header長度總共為42,所以解析header如下
dnsID, flags, num_questions, num_answers, num_auth, num_add = struct.unpack('!HHHHHH', packet[42:54])
其中flagsnum_questionsnum_answers比較重要,分別代表DNS參數例如queryreply,domain name詢問的數量,回答的數量
具體解析的方法放在utils/dns.pyparse_dns函數裡

那我們測試及驗證一下,首先在router或host下nslookup指令

#> nslookup www.google.com
Source Mac: 02:42:d1:92:9d:32 Destination Mac: 02:42:ac:11:00:02 Protocol: IPv4 Version: 4 Type of Service: 0 Packet ID: 5554 TTL: 64 Protocol: UDP Source IP: 172.17.0.2 Destination IP: 192.168.65.1
{'src_port': 60524, 'dest_port': 53, 'udp_length': 40, 'UDP_checksum': 44534, 'DNS': {'URLs': ['www.google.com'], 'IPs': [], 'NUM_Q': 1, 'NUM_A': 0, 'QR': 'Query'}}
------------------------
Source Mac: 02:42:ac:11:00:02 Destination Mac: 02:42:d1:92:9d:32 Protocol: IPv4 Version: 4 Type of Service: 0 Packet ID: 34463 TTL: 37 Protocol: UDP Source IP: 192.168.65.1 Destination IP: 172.17.0.2
{'src_port': 53, 'dest_port': 60524, 'udp_length': 56, 'UDP_checksum': 17310, 'DNS': {'URLs': ['www.google.com'], 'IPs': ['172.217.160.68'], 'NUM_Q': 1, 'NUM_A': 1, 'QR': 'Reply'}}
------------------------
Source Mac: 02:42:d1:92:9d:32 Destination Mac: 02:42:ac:11:00:02 Protocol: IPv4 Version: 4 Type of Service: 0 Packet ID: 5559 TTL: 64 Protocol: UDP Source IP: 172.17.0.2 Destination IP: 192.168.65.1
{'src_port': 51267, 'dest_port': 53, 'udp_length': 40, 'UDP_checksum': 44534, 'DNS': {'URLs': ['www.google.com'], 'IPs': [], 'NUM_Q': 1, 'NUM_A': 0, 'QR': 'Query'}}
------------------------
Source Mac: 02:42:ac:11:00:02 Destination Mac: 02:42:d1:92:9d:32 Protocol: IPv4 Version: 4 Type of Service: 0 Packet ID: 58022 TTL: 37 Protocol: UDP Source IP: 192.168.65.1 Destination IP: 172.17.0.2
{'src_port': 53, 'dest_port': 51267, 'udp_length': 68, 'UDP_checksum': 59155, 'DNS': {'URLs': ['www.google.com'], 'IPs': ['2404:6800:4012:0000:0000:0000:0000:2004'], 'NUM_Q': 1, 'NUM_A': 1, 'QR': 'Reply’}}

主要可以看DNS裡面的5個key-value,nslookup會query IPv4和IPv6,所以總共會有兩回query和reply,看log可以看出前兩次為IPv4的應答,後兩次為IPv6的應答。

系列的成果將會放在這:https://github.com/kaichiachen/pytcpdump
文章配合著程式碼有助於學習 :)


上一篇
Day16 聊聊https
下一篇
Day18 題外話 - 如何發起DNS spoofing
系列文
那些年還給老師的TCP/IP五層結構 - 用Python進行網路封包分析30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言