\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
| Path : /var/www/html/yedekledb24/DatabaseBackupMaster/ |
|
B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H |
| Current File : /var/www/html/yedekledb24/DatabaseBackupMaster/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())