• 19-07-2024, 14:23:00
    #1
    👑BRKNET Dijital Ajans👑
    Merhabalar,

    Son zamanlarda artan ihtiyaçlarım sebebiyle Cloudflare da bulunan +100 domain için tek tek işlem yapmaktansa toplu işlemleri kolayca yaptığım Python betiğini paylaşmak istedim.
    Umarım bir çok kişinin işini görecektir.

    Kullanım amacı:
    Cloudflare Hesabınızda kayıtlı tüm domainlerin tek seferde A kaydı bulunan IP numaralarını değiştirmeye yarayacak,

    Faydaları:
    Cloudflare tarafında fazlaca domain sahibi olanlar sunucu değişikliği yaptığında tek seferde IP değiştirebilecek. Böylelikle, 1 günden fazla vakit kazanılmış olacak.


    Öncelikle,
    CloudFlare hesabınıza giriş yapın ve aşağıdaki linkten API oluşturun.
    https://dash.cloudflare.com/profile/api-tokens

    Adımları takip edin,









    İşlem sonucunda size api verecek, bunu not edin.

    Bilgisayarınızda Python yüklü değil ise indirip yükleyin.
    https://www.python.org/downloads/

    Komut İstemi açıp gerekli kütüphaneyi yükleyin.
    pip install requests

    Sonrasında aşağıdaki betiği kopyalayıp CF_A_Update.py dosyası oluşturun.

    Python IDE ile Run yapın.

    import requests
    
    #BRKNET Danışmanlık
    # API token ve yeni IP adresi
    api_token = 'XXXX'  # Cloudflare API token numaranızı buraya yazın
    old_ip = 'XXXX'  # Güncellemek istediğiniz mevcut IP adresini buraya yazın
    new_ip = 'XXXX'  # Değişmesini istediğiniz Yeni IP adresinizi buraya yazın
    
    headers = {
        'Authorization': f'Bearer {api_token}',
        'Content-Type': 'application/json'
    }
    
    # Hesaptaki tüm zone ID'lerini ve isimlerini alma
    def get_zones():
        url = 'https://api.cloudflare.com/client/v4/zones'
        response = requests.get(url, headers=headers)
        response.raise_for_status()  # Hata kontrolü
        return response.json()
    
    # Belirli bir zone içindeki DNS kayıtlarını getirme
    def get_dns_records(zone_id):
        url = f'https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records'
        response = requests.get(url, headers=headers)
        response.raise_for_status()  # Hata kontrolü
        return response.json()
    
    # DNS kaydını güncelleme
    def update_dns_record(zone_id, record_id, new_ip, name, proxied):
        url = f'https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records/{record_id}'
        data = {
            'type': 'A',
            'name': name,
            'content': new_ip,
            'proxied': proxied
        }
        response = requests.put(url, headers=headers, json=data)
        response.raise_for_status()  # Hata kontrolü
        return response.json()
    
    # Tüm zone'ları al
    zones = get_zones()
    
    for zone in zones['result']:
        zone_id = zone['id']
        zone_name = zone['name']
        print(f"Zone: {zone_name}, ID: {zone_id}")
    
        # Her zone için DNS kayıtlarını al
        dns_records = get_dns_records(zone_id)
    
        for record in dns_records['result']:
            if record['type'] == 'A' and record['content'] == old_ip:
                update_response = update_dns_record(zone_id, record['id'], new_ip, record['name'], record['proxied'])
                print(f"Updated: {record['name']} from {old_ip} to {new_ip}, Status: {update_response['success']}")
    
    print("A tipi DNS kayıtları güncellendi.")
    Sonuç

  • 19-07-2024, 14:29:44
    #2
    Güzel bir proje olmuş elinize sağlık
  • 06-10-2025, 17:57:26
    #3
    maalesef 9 tane sonra çalışmıyor yani 9 domain yapıyor sonrasını bir şekilde atlıyor.
  • 06-10-2025, 20:56:45
    #4
    bunun la ilgili bir tık daha gelişmiş projem var.
  • 06-10-2025, 22:46:00
    #5
    Konuyu açan arkadaşın yönlendirmesi ile kod 2025 uyarladım. Kendisine çok teşekkürler.

    İsteyenler direk dosya indirebilir.

    https://drive.google.com/file/d/1gL4...ew?usp=sharing


    Alıntı
    import requests
    import time

    # Cloudflare API bilgileri
    API_TOKEN = "APİ Key"
    OLD_IP = "1.2.3.4.5" # Eski IP
    NEW_IP = "1.2.3.4.5" # Yeni IP

    headers = {
    "Authorization": f"Bearer {API_TOKEN}",
    "Content-Type": "application/json"
    }

    def get_all_zones():
    """Tüm zone'ları sayfalayarak getirir"""
    zones = []
    page = 1

    while True:
    response = requests.get(
    "https://api.cloudflare.com/client/v4/zones",
    headers=headers,
    params={"page": page, "per_page": 100}
    )
    data = response.json()
    if not data["success"]:
    print("❌ Zone listesi alınamadı:", data)
    break

    zones.extend(data["result"])
    if page >= data["result_info"]["total_pages"]:
    break
    page += 1

    return zones

    def get_all_a_records(zone_id):
    """Belirtilen zone'daki A kayıtlarını sayfalayarak getirir"""
    records = []
    page = 1

    while True:
    response = requests.get(
    f"https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records",
    headers=headers,
    params={"type": "A", "per_page": 100, "page": page}
    )
    data = response.json()
    if not data["success"]:
    print(f"❌ DNS kayıtları alınamadı (Zone ID: {zone_id})")
    break

    records.extend(data["result"])
    if page >= data["result_info"]["total_pages"]:
    break
    page += 1

    return records

    def update_a_record(zone_id, record, new_ip):
    """Belirtilen A kaydını yeni IP ile günceller"""
    record_id = record["id"]
    update_url = f"https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records/{record_id}"

    data = {
    "type": "A",
    "name": record["name"],
    "content": new_ip,
    "ttl": record["ttl"],
    "proxied": record["proxied"]
    }

    response = requests.put(update_url, headers=headers, json=data)
    return response.status_code == 200

    # === Ana İşlem Başlıyor ===

    print("📡 Tüm domainler (zonelar) çekiliyor...")
    zones = get_all_zones()
    print(f"✅ Toplam {len(zones)} zone bulundu.n")

    for zone in zones:
    zone_name = zone["name"]
    zone_id = zone["id"]
    print(f"🌐 Zone: {zone_name}")

    records = get_all_a_records(zone_id)

    updated = 0
    for record in records:
    if record["content"] == OLD_IP:
    success = update_a_record(zone_id, record, NEW_IP)
    if success:
    print(f" ✅ Güncellendi: {record['name']} -> {NEW_IP}")
    updated += 1
    else:
    print(f" ❌ HATA: {record['name']} güncellenemedi.")

    if updated == 0:
    print(" ℹ️ Güncellenecek kayıt bulunamadı.")
    time.sleep(0.5) # API rate limit'e karşı ufak gecikme

    print("n🎉 Tüm işlemler tamamlandı.")