Sử dụng một phân giải DNS (ví dụ dnspython
), bạn có thể truy vấn tên miền cho DNSKEY RRset của nó và bật DO
cờ truy vấn (DNSSEC OK). Nếu truy vấn thành công, câu trả lời sẽ có cờ AD
(dữ liệu đã xác thực) và sẽ chứa chữ ký RRSIG cho vùng đó (nếu nó được ký).
Cập nhật: một ví dụ cơ bản sử dụng dnspython
import dns.name
import dns.query
import dns.dnssec
import dns.message
import dns.resolver
import dns.rdatatype
# get nameservers for target domain
response = dns.resolver.query('example.com.',dns.rdatatype.NS)
# we'll use the first nameserver in this example
nsname = response.rrset[0] # name
response = dns.resolver.query(nsname,dns.rdatatype.A)
nsaddr = response.rrset[0].to_text() # IPv4
# get DNSKEY for zone
request = dns.message.make_query('example.com.',
dns.rdatatype.DNSKEY,
want_dnssec=True)
# send the query
response = dns.query.udp(request,nsaddr)
if response.rcode() != 0:
# HANDLE QUERY FAILED (SERVER ERROR OR NO DNSKEY RECORD)
# answer should contain two RRSET: DNSKEY and RRSIG(DNSKEY)
answer = response.answer
if len(answer) != 2:
# SOMETHING WENT WRONG
# the DNSKEY should be self signed, validate it
name = dns.name.from_text('example.com.')
try:
dns.dnssec.validate(answer[0],answer[1],{name:answer[0]})
except dns.dnssec.ValidationFailure:
# BE SUSPICIOUS
else:
# WE'RE GOOD, THERE'S A VALID DNSSEC SELF-SIGNED KEY FOR example.com
Điều này có vẻ phù hợp: http: // www.unbound.net/documentation/pyunbound/examples/example4.html – kasperd
Liên kết tốt đẹp! Cảm ơn – Thorben
Chúng tôi đã cố gắng sử dụng không liên kết trong một thời gian và nó không bao giờ hoạt động tốt. – vy32