DNS Sorgulama için Python Kurulumu ve Gereksinimler
Python Kurulumunun Kontrolü
İlk adım olarak sisteminizde Python’ın kurulu olup olmadığını kontrol etmeliyiz. Terminal veya komut istemcisinde aşağıdaki komutu çalıştırın:
python --version
Bu komut Python’ın sürüm numarasını gösterecektir. Eğer Python kurulu değilse, python.org adresinden işletim sisteminize uygun sürümü indirip kurabilirsiniz.
Gerekli Python Paketleri
DNS sorguları için ihtiyaç duyacağımız temel Python paketleri şunlardır:
pip install dnspython
pip install requests
Bu paketler size şu özellikleri sağlayacaktır:
dnspython
: DNS sorgularını gerçekleştirmek için gerekli temel kütüphanerequests
: HTTP istekleri yapabilmek ve web tabanlı DNS hizmetleriyle etkileşim kurabilmek için
Kurulumun başarılı olduğunu kontrol etmek için Python konsolunda şu importları test edebilirsiniz:
import dns.resolver
import requests
DNS Sunucularını Toplama Fonksiyonu
Bu fonksiyon, belirtilen alan adı için tüm DNS sunucularını toplayacak ve ayrıntılı bilgileri döndürecektir.
import dns.resolver
from typing import List, Dict
import time
def collect_dns_information(domain: str) -> Dict:
"""
Bir alan adına ait tüm DNS sunucularının bilgilerini toplar.
Args:
domain (str): Sorgulanacak alan adı (örn: "example.com")
Returns:
Dict: DNS bilgilerini içeren sözlük
"""
dns_info = {
'domain': domain,
'nameservers': [],
'a_records': [],
'mx_records': [],
'txt_records': [],
'timestamp': time.strftime('%Y-%m-%d %H:%M:%S')
}
resolver = dns.resolver.Resolver()
try:
# NS (Nameserver) kayıtları
ns_records = resolver.resolve(domain, 'NS')
for ns in ns_records:
dns_info['nameservers'].append({
'hostname': str(ns.target),
'ip': str(resolver.resolve(str(ns.target), 'A')[0])
})
# A kayıtları
a_records = resolver.resolve(domain, 'A')
for a in a_records:
dns_info['a_records'].append(str(a))
# MX kayıtları
try:
mx_records = resolver.resolve(domain, 'MX')
for mx in mx_records:
dns_info['mx_records'].append({
'preference': mx.preference,
'exchange': str(mx.exchange)
})
except dns.resolver.NoAnswer:
pass
# TXT kayıtları
try:
txt_records = resolver.resolve(domain, 'TXT')
for txt in txt_records:
dns_info['txt_records'].append(str(txt))
except dns.resolver.NoAnswer:
pass
except dns.resolver.NXDOMAIN:
return {'error': 'Alan adı bulunamadı'}
except Exception as e:
return {'error': f'Sorgulama hatası: {str(e)}'}
return dns_info
# Fonksiyonun kullanımı
def main():
domain = "example.com" # Test edilecek alan adı
results = collect_dns_information(domain)
# Sonuçları formatlı şekilde yazdır
print(f"\nDNS Bilgileri - {results['domain']}")
print(f"Sorgu Zamanı: {results['timestamp']}\n")
print("Nameservers:")
for ns in results['nameservers']:
print(f" - {ns['hostname']} ({ns['ip']})")
print("\nA Kayıtları:")
for a in results['a_records']:
print(f" - {a}")
print("\nMX Kayıtları:")
for mx in results['mx_records']:
print(f" - Öncelik: {mx['preference']}, Sunucu: {mx['exchange']}")
print("\nTXT Kayıtları:")
for txt in results['txt_records']:
print(f" - {txt}")
if __name__ == "__main__":
main()
Bu kod şu özellikleri içerir:
Type hinting kullanılarak kod okunabilirliği artırıldı
Kapsamlı hata yönetimi eklendi
Şu DNS kayıt türlerini toplar:
- NS (Nameserver) kayıtları ve IP adresleri
- A kayıtları
- MX kayıtları ve öncelik değerleri
- TXT kayıtları
Zaman damgası ile sonuçların ne zaman toplandığı kaydedilir
Fonksiyonu kullanmak için sadece alan adını parametre olarak vermeniz yeterlidir:
results = collect_dns_information("example.com")
Fonksiyonu geliştirmek veya belirli kayıt türleri için özel sorgular eklemek ister misiniz?