커맨드라인에서 nslookup 이나 dig를 이용해 dns 쿼리를 가끔 이용하는데, pc를 이용할 수 없는 상황이 생김.
그래서, iPhone web 브라우저에서 dns 쿼리를 가능하게 하도록 프로그램 작성함.(https://webdns.boxcorea.com)
사용한 파이썬 라이브러리는 dnspython인데, 사용법이 쉽지않다. 아래는 위 사이트의 백엔드 코드.
import dns.resolver import dns.message import dns.rdataclass import dns.rdatatype import dns.name import dns.flags def is_answer(result): res = list() start = end = int() for i in range(len(result)): if result[i] == ';ANSWER': start = i+1 if result[i] == ';AUTHORITY': end = i if start == end: res.append('No name server returned any records for this request.') return res else: for i in range(start, end): res.append(result[i]) i += 1 return res def any_query(domain, qtype, dserver): qname = dns.name.from_text(domain) if qtype == 'ANY': q = dns.message.make_query(qname, dns.rdatatype.ANY) result = str(dns.query.udp(q, dserver)).split('\n') res = is_answer(result) return res def not_any_query(domain, qtype, dserver): # qtype is 'A', 'AAAA', 'MX', 'NS', 'TXT', 'SOA', 'CNAME' resolver = dns.resolver.Resolver(configure=False) resolver.nameservers = [dserver] if not domain: return ['Need to hostname'] try: # answers = dns.resolver.query(domain, qtype, raise_on_no_answer=False) answers = resolver.query(domain, qtype, raise_on_no_answer=False) if answers.rrset is not None: # print(type(answers.rrset)) result = str(answers.rrset).split('\n') return result else: result = ['No name server returned any records for this request.'] return result except: return ['No name server returned any records for this request! or hostname is null.'] def dns_query(domain, qtype, dserver): if qtype == 'ANY': result = any_query(domain, qtype, dserver) else: result = not_any_query(domain, qtype, dserver) return result if __name__ == '__main__': r = dns_query('google.com', 'ANY', '168.126.63.1') print(r) r = dns_query('daum.net', 'MX', '208.67.222.222') print(r)