python dig 시 뮬 레이 션-DGA 도 메 인 이름 판정 용

원본 링크:http://www.cnblogs.com/bonelee/p/8675078.html
 
#!/usr/bin/env python

import dns.resolver, sys


def get_domain_ip(domain):
    """Get the DNS record, if any, for the given domain."""
    dns_records = list()
    try:
        # get the dns resolutions for this domain
        dns_results = dns.resolver.query(domain)
        dns_records = [ip.address for ip in dns_results]
    except dns.resolver.NXDOMAIN as e:
        print "the domain does not exist so dns resolutions remain empty. domain:", domain
    except dns.resolver.NoAnswer as e:
        print "the resolver is not answering so dns resolutions remain empty, domain:", domain
    return dns_records



hostname = sys.argv[1]
print "Recursive name lookup (simulates dig)..."

n=hostname
try:
  while True:
    for rdata in dns.resolver.query(n, 'CNAME') :
      print n, "cname is", rdata
      n=rdata.target
except:
  print get_domain_ip(n)

예 를 들 면:
 python dig_ip.py 8264.com Recursive name lookup(simulates dig)...8264.com cname 은 qaz2d84guo7uz5q2.gfnormal01at.com 입 니 다.[u'121.29.18.91']=>IP 주소
 
python dig_ip.py www.baidu.com Recursive name lookup(simulates dig)...www.baidu.com cname is www.a.shifen.com.www.a.shifen.com.cname is www.wshifen.com.[u'103.235.46.39',u'103.235.46.40']=>IP 주소
검색 결과 가 없 는 DGA 도 메 인 이름:
python dig_ip.py s09xo3-l5domek9ck5ct3go4m.comRecursive name lookup (simulates dig)...the domain does not exist so dns resolutions remain empty. domain: s09xo3-l5domek9ck5ct3go4m.com[]
 
그 중에서 dns.resolver.NoAnswer 는 분류 오류 가 발생 했 을 때 이 이상 을 뛰 어 냅 니 다.예 를 들 어:
python dig_ip.py www.baidu.comRecursive name lookup (simulates dig)...www.baidu.com cname is www.a.shifen.com.www.a.shifen.com. cname is www.wshifen.com.The DNS response does not contain an answer to the question: www.wshifen.com. IN CNAME
 
마지막 으로 코드 재 구성:
 
#!/usr/bin/env python

import dns.resolver, sys


def get_domain_ip(domain):
    """Get the DNS record, if any, for the given domain."""
    dns_records = list()
    try:
        # get the dns resolutions for this domain
        dns_results = dns.resolver.query(domain)
        dns_records = [ip.address for ip in dns_results]
    except dns.resolver.NXDOMAIN as e:
        print "the domain does not exist so dns resolutions remain empty. domain:", domain
    except dns.resolver.NoAnswer as e:
        print "the resolver is not answering so dns resolutions remain empty, domain:", domain
    return dns_records



def dig_ip(n):
    try:
        while True:
            for rdata in dns.resolver.query(n, 'CNAME') :
                print n, "cname is", rdata
                n=rdata.target
    except Exception as e:
        print e
        return get_domain_ip(n)

if __name__ == "__main__":
    print "Recursive name lookup (simulates dig)..."
    print dig_ip(sys.argv[1])

 
다음으로 전송:https://www.cnblogs.com/bonelee/p/8675078.html

좋은 웹페이지 즐겨찾기