GoBuster Python Clone

REPO

#!/usr/bin/python
from threading import Thread
import sys
from Queue import Queue
import time
import requests
import argparse

concurrent = 200

def doSomethingWithResult(status):
    if status.startswith("301") or status.startswith("200") or status.startswith("403"):
        print "Success: ",status.strip(),"\n",
        with open(args.out,'a+') as f:
            f.write("Success: " + status.strip() + "\n")
        f.close()

def doWork():
    while True:
        url = target + q.get()
        status = getStatus(url.strip())
        doSomethingWithResult(status)
        q.task_done()

def getStatus(url):
    try:
        r = requests.head(url,timeout=1)
        results = '{}:{}'.format(r.status_code,url)
        return results.strip()
    except:
        return "Error:"

def getArgs():
    parser = argparse.ArgumentParser()
    parser.add_argument("--url", help="http://ip/ or https://site.com/")
    parser.add_argument("--wordlist", help="/usr/share/wordlists/list.txt")
    parser.add_argument("--out",help="output successes to file")
    args = parser.parse_args()
    if not len(sys.argv) > 1 or not len(sys.argv) == 7:
        print parser.print_help()
        sys.exit()
    return args

def fix_url(url):
    if not url.endswith("/"):
        url = url + "/"
        return url
    else:
        return url

if __name__ == "__main__":
    #print("### PyMegaBuster ###")
    print '''...
######################################################################
  ___      __  __      ___      ___      ___ ___ _   ___ ___
 | _ \\_  _|  \\/  |___ / __|__ _| _ )_  _/ __/ __| |_| __| _ \\
 |  _/ || | |\\/| / -_) (_ / _` | _ \\ || \\__ \\__ \\  _| _||   /
 |_|  \\_, |_|  |_\\___|\\___\\__,_|___/\\_,_|___/___/\\__|___|_|_\\
      |__/
######################################################################
'''
    time.sleep(1)
    print("Starting....")
    global args
    args = getArgs()
    target = args.url.strip()
    target = fix_url(target)
    start = time.time()
    q = Queue(concurrent * 2)
    for i in range(concurrent):
        t = Thread(target=doWork)
        t.daemon = True
        t.start()
    try:
        for url in open(str(args.wordlist)):
            q.put(url)
        q.join()
    except KeyboardInterrupt:
        sys.exit(1)
    end = time.time()

    print("### Completed in {} seconds. ###".format( end - start))