[PYTHON] 도메인이 DNSSEC로 보호되어 있는지 프로그래밍 방식으로 확인
PYTHON도메인이 DNSSEC로 보호되어 있는지 프로그래밍 방식으로 확인
제목에 따르면 DNSSEC을 사용하여 도메인에 대한 DNS 응답이 프로그래밍 방식으로 검사되는지 확인하려고합니다. 내가 어떻게 할 수 있니?
이것에 대한 pythonic 솔루션이 있다면 그것은 좋을 것입니다.
최신 정보: 응답 요청이 변경되었습니다. 혼란스러워서 죄송합니다.
해결법
-
==============================
1.DNS 리졸버 (예 : dnspython)를 사용하면 DNSKEY RRset에 대해 도메인을 쿼리하고 DO (dnssec OK) 쿼리 플래그를 설정할 수 있습니다. 쿼리가 성공하면 대답에는 AD (인증 된 데이터) 플래그가 설정되고 영역에 대한 RRSIG 서명 (서명 된 경우)이 포함됩니다.
DNS 리졸버 (예 : dnspython)를 사용하면 DNSKEY RRset에 대해 도메인을 쿼리하고 DO (dnssec OK) 쿼리 플래그를 설정할 수 있습니다. 쿼리가 성공하면 대답에는 AD (인증 된 데이터) 플래그가 설정되고 영역에 대한 RRSIG 서명 (서명 된 경우)이 포함됩니다.
업데이트 : 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
-
==============================
2.특정 요청이 보호되는지 확인하려면 요청 패킷의 DO 플래그를 확인하십시오. DNS에 인터페이스하기 위해 사용하는 언어와 라이브러리가 무엇이든간에 ( "dnssec"과 같은 다른 이름으로 불려질 수도있는) 액세서가 있어야합니다.
특정 요청이 보호되는지 확인하려면 요청 패킷의 DO 플래그를 확인하십시오. DNS에 인터페이스하기 위해 사용하는 언어와 라이브러리가 무엇이든간에 ( "dnssec"과 같은 다른 이름으로 불려질 수도있는) 액세서가 있어야합니다.
첫 번째 대답은 정확하지만 특정 영역이 보호되는지 알고 싶으면 불완전합니다. 설명 된 절차는 영역의 자체 데이터에 서명 여부를 알려줍니다. 해당 영역에 대한 위임이 보호되는지 확인하려면 관심 영역에 대한 (올바르게 서명 된) DS 레코드를 부모 영역의 네임 서버에 요청해야합니다.
from https://stackoverflow.com/questions/26137036/programmatically-check-if-domains-are-dnssec-protected by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 어떻게하면 / proc / net / dev의 출력을 파이썬을 사용하여 인터페이스 당 key : value 쌍으로 파싱 할 수 있습니까? (0) | 2018.11.28 |
---|---|
[PYTHON] 아름다운 스프 결과에 누락 된 부분 (0) | 2018.11.28 |
[PYTHON] 복제로 데이터 정규화 (0) | 2018.11.28 |
[PYTHON] 파이썬에서 하프 톤 이미지 (0) | 2018.11.28 |
[PYTHON] Visual Studio Python 프로젝트에 CNTK virtualenv 추가 (0) | 2018.11.28 |