[英]Python: Get the RA flag from DNS
我正在嘗試從 DNS 中專門獲取遞歸可用 (RA) 標志。 根據 RFC 1035,如果沒有遞歸,它應該返回零,否則返回非零。 如果 DNS 響應被 Quad9 DNS 服務阻止,它將返回帶有“RA:0”的“NXDOMAIN”
但是,使用 DNSPython 總是返回非零 (128)。 這可以在庫中硬編碼嗎?
import dns
import dns.resolver
# Allowed Domain
# should return an IP address with "RA" non-zero
domain = "google.com"
# Blocked domain
# Should return NXDOMAIN with "RA" to 0
#domain = "takelady.net" ---> UNCOMMENT
# Set Resolver to Quad9 (quad9.net)
my_resolver = dns.resolver.Resolver()
my_resolver.nameservers = ['9.9.9.9']
try:
dns_response = dns.resolver.query(domain, "A")
for resp in dns_response:
print("[+]", resp.to_text())
print("RA flag:", dns.flags.RA)
except dns.resolver.NXDOMAIN:
print("[+] NXDOMAIN")
print("RA flag:", dns.flags.RA)
pass
except dns.resolver.NoAnswer:
print("[+] NoAnswer")
pass
except dns.resolver.Timeout:
print("[+] Timeout")
pass
允許的響應:
[+] 172.217.214.100
[+] 172.217.214.101
[+] 172.217.214.138
[+] 172.217.214.139
[+] 172.217.214.113
[+] 172.217.214.102
RA flag: 128
阻止響應:
[+] NXDOMAIN
RA flag: 128
您不使用已創建的解析器 object,因此向系統解析器查詢 go。 你應該改用這個:
dns_response = my_resolver.query(domain, "A")
query()
執行搜索列表處理,因此您應該先清除搜索列表,如下所示:
my_resolver = dns.resolver.Resolver()
my_resolver.nameservers = ['9.9.9.9']
my_resolver.search = []
最后, NXDOMAIN
響應導致異常,您需要從異常中的響應 object 中讀取標志,如下所示:
except dns.resolver.NXDOMAIN as e:
print("[+] NXDOMAIN")
for (name, resp) in e.responses().items():
print(name, "RA flag:", resp.flags & dns.flags.RA)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.