,

Proje Ornegi

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üphane

  • requests: 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:

  1. Type hinting kullanılarak kod okunabilirliği artırıldı

  2. Kapsamlı hata yönetimi eklendi

  3. Ş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ı
  4. 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?