// Sadece Kendi Fikirlerim!

$ Python ile Detaylı DNS Sorgulama: Bir Alan Adının Sırlarını Çözmek

Bir alan adının arkasında hangi IP adreslerinin olduğunu, e-postalarını hangi sunucuların yönettiğini veya hangi isim sunucularını kullandığını merak ettiniz mi? Tüm bu bilgiler, DNS (Domain Name System) kayıtlarında saklıdır. Bu makalede, Python'un güçlü dnspython kütüphanesini kullanarak bu kayıtları nasıl programatik olarak sorgulayacağımızı ve bir alan adının teknik sırlarını nasıl ortaya çıkaracağımızı göreceğiz.

Neden DNS Sorgulamalıyız?

DNS sorguları, ağ yöneticileri, siber güvenlik uzmanları ve geliştiriciler için temel bir araçtır. Bir web sitesinin altyapısını anlamak, e-posta teslim sorunlarını gidermek veya bir alan adının yapılandırmasını doğrulamak gibi birçok senaryoda kullanılır.

Gerekli Kütüphane: dnspython

Bu işlem için Python'un standart kütüphanesinde bulunmayan, ancak bu iş için en popüler ve kapsamlı araç olan dnspython kütüphanesini kullanacağız. Kurulumu oldukça basittir:

pip install dnspython

Temel DNS Kayıt Türleri ve Sorgulama

Aşağıdaki Python betiği, belirtilen bir alan adı için en yaygın DNS kayıt türlerini sorgular ve sonuçları düzenli bir şekilde ekrana basar.

Örnek Python Kodu

Aşağıdaki betik, `virtualscrap.com` alan adı için tüm bu sorguları gerçekleştirir.

import dns.resolver

def get_dns_records(domain):
    """
    Belirtilen alan adı için temel DNS kayıtlarını sorgular ve yazdırır.
    """
    record_types = ['A', 'AAAA', 'MX', 'NS', 'TXT']
    
    print(f"--- {domain} için DNS Kayıtları ---")
    
    for record_type in record_types:
        try:
            answers = dns.resolver.resolve(domain, record_type)
            print(f"\n[+] {record_type} Kayıtları:")
            for rdata in answers:
                print(f"  - {rdata.to_text()}")
        except dns.resolver.NoAnswer:
            print(f"\n[!] {record_type} kaydı bulunamadı.")
        except dns.resolver.NXDOMAIN:
            print(f"\n[X] Alan adı ({domain}) mevcut değil.")
            return
        except Exception as e:
            print(f"\n[X] {record_type} sorgusunda bir hata oluştu: {e}")

if __name__ == '__main__':
    target_domain = "virtualscrap.com"
    get_dns_records(target_domain)