[python] dnspython

Yoo·2025년 7월 23일

DNS의 정의와 종류

DNS(Domain Name System)

  • 정의
    도메인 이름을 IP 주소로 바꿔주는 시스템입니다.

    사용자(도메인) - DNS(번역) - 컴퓨터(IP)
    예) www.naver.com > 999.999.999

  • 레코드 종류

  1. IPv4 : 가장 오래되고 아직 많이 쓰는 IP 버전 (32비트)
    192.168.0.1
  2. IPv6 : IPv4 주소 고갈 문제 해결을 위해 만듬 (128비트)
    2001:0db8:85a3:0000:0000:8a2e:0370:7334

dnspython

  • 정의
    python에서 DNS 관련 작업을 처리할 수 있게 해주는 라이브러리 입니다.

  • 설치
    pip install dnspython

  • 기본 예제(IP 주소 얻기)
    resolve(domain, type)
    result의 값은 to_text()를 사용해서 사람이 읽기 쉽게 값을 반환

import dns.resolver

result = dns.resolver.resolve('google.com', 'A')
for index in result:
	print(index.to_text())
142.250.196.206
  • 응답시간 예제
    time.time()은 현재 시간을 초 단위로 변환합니다.
import dns.resolver, time

start_time = time.time() # 시작 시간
approve = dns.resolver.resolve('google.com', 'A')
end_time = time.time() # 종료 시간

response = round((end_time - start_time) * 1000, 2) # 
print(f"{response} ms")
3.97 ms

  • 실전) 서버 별로 응답시간 측정
    tester는 DNS 작업을 수행하는 객체
    tester.nameservers는 DNS 요청을 보낼 서버 ip를 직접 설정
import dns.resolver, time

DNS_Server = {
    "Google" : "8.8.8.8",
    "KISA" : "203.248.252.2",
    "KT" : "168.126.63.1",
    "SKB" : "219.250.36.130",
    "LGU+" : "164.124.101.2",
    "Kakao" : "203.248.252.2"
}

domain = input("도메인을 입력하세요: ")

approve = {}
result = {}

for name, ip in DNS_Server.items():
    tester = dns.resolver.Resolver()
    tester.nameservers = [ip]
    start_time = time.time()
    approve = tester.resolve(domain, 'A')
    end_time = time.time()
    answer = round((end_time - start_time) * 1000, 2)
    result[name] = answer

for name, time_ms in result.items():
    print(f"{name} : {time_ms}")
도메인을 입력하세요: naver.com
Google : 35.64
KISA : 3.9
KT : 2.84
SKB : 2.58
LGU+ : 3.85
Kakao : 3.26

  • urlparse
    사용자가 입력한 도메인을 제대로 추출하지 못할 수 있어서 urlparse를 사용해 도메인을 명확하게 추출해서 값을 전달합니다.

from urllib.parse import urlparse는 URL을 구조적으로 분해해주는 파이썬 함수
full_path가 프로토콜 없이 입력할 수도 있어 정상 URL로 만들어줍니다.
netloc은 URL에서 도메인만 가져옵니다.
예) velog.io/@user/post > netloc = velog.io

from urllib.parse import urlparse

full_path = input("도메인을 입력하세요: )
parsed = urlparse(full_path 
if full_path.startswith("http") 
else "https://" + full_path)

domain = parsed.netloc

마무리

dnspython은 대학교 수강신청, 티켓팅 등 응답시간이 빠를 수록 유리한 상황에서 유용하게 사용할 수 있다고 생각합니다.
피드백은 댓글로 남겨주세요.

profile
월1억벌기

2개의 댓글

comment-user-thumbnail
2025년 7월 24일

유익한 지식입니다.

1개의 답글