Skip to content

yalonw/DNS

Repository files navigation

DNS

Codes and Notes while learning DNS.

問 DNS,拿 www.google.com8.8.8.8 十次,統計他回傳的結果及他們出現的次數 ~

提示:1. 一個 domain 可以有多筆 record 指向不同的 IP,所以才需要統計結果
   2. 可用 subprocess 搭配 nslookup

pip install dnspython
import dns.resolver

my_resolver = dns.resolver.Resolver()
my_resolver.nameservers = ['8.8.8.8']

ipval_cnt = {}
domain = 'google.com'

for i in range(10):
    result = dns.resolver.query(domain, 'A')    
    for ipval in result:
        ipval_text = ipval.to_text()

    if ipval.to_text() in ipval_cnt:
        cnt = ipval_cnt[ipval_text] + 1
        ipval_cnt[ipval_text] = cnt
    else:
        ipval_cnt[ipval_text] = 1
    
print(ipval_cnt)

簡單來說 (點這看詳細)

  1. 因為 Answer(object) 沒有 override __str__
    所以 print(Answer()) 會印出 object__str__

  2. print(Answer().rrset) 會呼叫 RRset__str__
    則會印出 「google.com. 111 IN A 216.58.200.238

  3. 因為 Answer() 有 override __iter__
    所以 [ x for x in Answer() ] 等於 [ x for x in Answer().rrset ]
    type(rrset) == RRset

  4. 又因為 RRset 繼承 Rdataset 繼承 Set,而 Set() 有 override __iter__
    所以 [ x for x in Answer().rrset ] 等於 [ x for x in Answer().rrset.items ]

  5. Set()__init__ 有 assign self.items = []
    表示 items 的資料型態是 list,所以才需要使用 迴圈,用 for loop print() 出來


其他筆記:DNS Messages Format

DNS message packet

About

Codes and Notes while learning DNS.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages