DNS là gì? Python DNS là gì?
Hệ thống tên miền còn được gọi là DNS (Domain Name Server) căn bản giống như một dịch vụ danh bạ của nền tảng internet. DNS dịch tên miền sang địa chỉ IP tương ứng để trình duyệt có thể truy cập và lấy dữ liệu. Hôm nay mình sẽ chia sẻ đến các bạn các loại bản ghi (record) DNS và cách tra cứu DNS khi viêt code Python. Trong Python 3 có cung cấp một mô-đun Python DNS được sử dụng để xử lý quá trình dịch tên miền sang địa chỉ IP.
Tra cứu bản ghi DNS trong Python
Mô-đun dnspython cung cấp hàm dns.resolver () giúp tìm ra các bản ghi khác nhau của một tên miền. Hàm nhận hai tham số đầu vào là tên miền và loại bản ghi. Một số loại bản ghi với các ví dụ được liệt kê dưới đây:
Bản ghi A:
Đây là loại bản ghi DNS cơ bản, ở đây A là viết tắt của địa chỉ. Nó hiển thị địa chỉ IP của miền. Để query bản ghi này bằng Python DNS ta dùng như sau.
# Import libraries
import dns.resolver
# Finding A record
result = dns.resolver.query('geeksforgeeks.org', 'A')
# Printing record
for val in result:
print('A Record : ', val.to_text())
Kết quả:
A Record : 34.218.62.116
Bản ghi AAAA:
Đây là bản ghi địa chỉ IP, được sử dụng để tìm IP của máy tính được kết nối với miền. Về mặt khái niệm, nó tương tự như bản ghi A nhưng chỉ xác định địa chỉ IPv6 của máy chủ chứ không phải IPv4. Để query bản ghi này bằng Python DNS ta dùng như sau.
# Import libraries
import dns.resolver
# Finding AAAA record
result = dns.resolver.query('geeksforgeeks.org', 'AAAA')
# Printing record
for val in result:
print('AAAA Record : ', ipval.to_text())
Kết quả:
NoAnswer: The DNS response does not contain an answer to the question: geeksforgeeks.org. IN AAAA
Bản ghi NS:
Bản ghi máy chủ định danh (Name Sever) cung cấp thông tin rằng máy chủ nào chịu trách nhiệm phân giải tên miền này, tức là máy chủ có bản ghi DNS thực mà tên miền đó đăng ký. Có thể có nhiều bản ghi NS cho một miền bao gồm máy chủ định danh chính và máy chủ định danh dự phòng.
# Import libraries
import dns.resolver
# Finding NS record
result = dns.resolver.query('geeksforgeeks.org', 'NS')
# Printing record
for val in result:
print('NS Record : ', val.to_text())
Kết quả:
NS Record : ns-1520.awsdns-62.org.
NS Record : ns-1569.awsdns-04.co.uk.
NS Record : ns-245.awsdns-30.com.
NS Record : ns-869.awsdns-44.net.
Bản ghi MX:
MX là viết tắt của Mail Exchanger record, là bản ghi tài nguyên chỉ định máy chủ thư chịu trách nhiệm chấp nhận email thay mặt cho miền. Nó có các giá trị ưu tiên theo thư ưu tiên nếu có nhiều máy chủ thư để cân bằng tải và dự phòng.
# Import libraries
import dns.resolver
# Finding MX record
result = dns.resolver.query('geeksforgeeks.org', 'MX')
# Printing record
for val in result:
print('MX Record : ', val.to_text())
Kết quả:
# Import libraries
import dns.resolver
# Finding MX record
result = dns.resolver.query('geeksforgeeks.org', 'MX')
# Printing record
for val in result:
print('MX Record : ', val.to_text())
Bản ghi SOA:
SOA là viết tắt của Start of Authority records, là một loại bản ghi tài nguyên chứa thông tin liên quan đến việc quản lý vùng, đặc biệt liên quan đến việc chuyển vùng được xác định bởi người quản trị vùng.
# Import libraries
import dns.resolver
# Finding SOA record
result = dns.resolver.query('geeksforgeeks.org', 'SOA')
# Printing record
for val in result:
print('SOA Record : ', val.to_text())
Kết quả:
SOA Record : ns-869.awsdns-44.net. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
Bản ghi CNAME:
CNAME là viết tắt của bản ghi Canonical Name, được sử dụng để ánh xạ tên miền làm bí danh cho tên miền khác. Nó luôn trỏ đến một miền khác và không bao giờ trỏ trực tiếp đến một IP.
# Import libraries
import dns.resolver
# Finding CNAME record
result = dns.resolver.query('geeksforgeeks.org', 'CNAME')
# Printing record
for val in result:
print('CNAME Record : ', val.target)
Kết quả:
NoAnswer: The DNS response does not contain an answer to the question: geeksforgeeks.org. IN CNAME
Bản ghi TXT:
Các bản ghi này chứa thông tin văn bản không thực sự ảnh hưởng đến domain. Bản ghi TXT có thể được sử dụng cho các mục đích khác nhau như Google sử dụng chúng để xác minh quyền sở hữu tên miền và đảm bảo bảo mật email.
# Import libraries
import dns.resolver
# Finding TXT record
result = dns.resolver.query('geeksforgeeks.org', 'TXT')
# Printing record
for val in result:
print('TXT Record : ', val.to_text())
Kết quả:
TXT Record : “fob1m1abcdp777bf2ncvnjm08n”
TXT Record : “v=spf1 include:amazonses.com include:_spf.google.com ip4:167.89.66.115 -all”
Kết luận
Python DNS là một module hữu ích khi chúng ta cần lập trình mạng hoặc phần mềm mạng bằng python.
Tham khảo thêm về module này tại: https://dnspython.readthedocs.io/en/latest/resolver-class.html
Tham khảo thêm về lập trình: https://cloudyez.com/lap-trinh/