Advertisement
SERBIANHACKERS

SRBTOOL | Username generator

Apr 18th, 2017
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.23 KB | None | 0 0
  1. #SRBHACKERS
  2.  
  3. #!/usr/bin/env python
  4.  
  5. import sys
  6. from collections import namedtuple
  7. import string
  8. import argparse
  9. import os
  10. try:
  11.     import xlrd
  12. except:
  13.     sys.exit("[!] Please install the xlrd library: pip install xlrd")
  14.  
  15. def unique_list(list_sort, verbose):
  16.     noted = []
  17.     if verbose > 0:
  18.         print("[*] Removing duplicates while maintaining order")
  19.     [noted.append(item) for item in list_sort if not noted.count(item)] # List comprehension
  20.     return noted
  21.  
  22.  
  23. def census_parser(filename, verbose):
  24.     # Create the named tuple
  25.     CensusTuple = namedtuple('Census', 'name, rank, count, prop100k, cum_prop100k, pctwhite, pctblack, pctapi, pctaian, pct2prace, pcthispanic')
  26.  
  27.     # Define the location of the file and worksheet till arguments are developed
  28.     worksheet_name = "top1000"
  29.  
  30.     #Define work book and work sheet variables
  31.     workbook = xlrd.open_workbook(filename)
  32.     spreadsheet = workbook.sheet_by_name(worksheet_name)
  33.     total_rows = spreadsheet.nrows - 1
  34.     current_row = -1
  35.  
  36.     # Define holder for details
  37.     username_dict = {}
  38.     surname_dict = {}
  39.     alphabet = list(string.ascii_lowercase)
  40.  
  41.     while current_row < total_rows:
  42.         row = spreadsheet.row(current_row)
  43.         current_row += 1
  44.         entry = CensusTuple(*tuple(row)) #Passing the values of the row as a tuple into the namedtuple
  45.         surname_dict[entry.rank] = entry
  46.         cellname = entry.name
  47.         cellrank = entry.rank
  48.         for letter in alphabet:
  49.             if "." not in str(cellrank.value):
  50.                 if verbose > 1:
  51.                     print("[-] Eliminating table headers")
  52.                 break
  53.             username = letter + str(cellname.value.lower())
  54.             rank = str(cellrank.value)
  55.             username_dict[username] = rank
  56.     username_list = sorted(username_dict, key=lambda key: username_dict[key])
  57.  
  58.     return(surname_dict, username_dict, username_list)
  59.  
  60. def username_file_parser(prepend_file, append_file, verbose):
  61.     if prepend_file:
  62.         put_where = "begin"
  63.         filename = prepend_file
  64.     elif append_file:
  65.         put_where = "end"
  66.         filename = append_file
  67.     else:
  68.         sys.exit("[!] There was an error in processing the supplemental username list!")
  69.     with open(filename) as file:
  70.         lines = [line.rstrip('\n') for line in file]
  71.     if verbose > 1:
  72.         if "end" in put_where:
  73.             print("[*] Appending %d entries to the username list") % (len(lines))
  74.         else:
  75.             print("[*] Prepending %d entries to the username list") % (len(lines))
  76.     return(lines, put_where)
  77.  
  78. def combine_usernames(supplemental_list, put_where, username_list, verbose):
  79.     if "begin" in put_where:
  80.         username_list[:0] = supplemental_list #Prepend with a slice
  81.     if "end" in put_where:
  82.         username_list.extend(supplemental_list)
  83.     username_list = unique_list(username_list, verbose)
  84.     return(username_list)
  85.  
  86. def write_username_file(username_list, filename, domain, verbose):
  87.     open(filename, 'w').close() #Delete contents of file name
  88.     if domain:
  89.         domain_filename = filename + "_" + domain
  90.         email_list = []
  91.         open(domain_filename, 'w').close()
  92.     if verbose > 1:
  93.         print("[*] Writing to %s") % (filename)
  94.     with open(filename, 'w') as file:
  95.         file.write('\n'.join(username_list))
  96.     if domain:
  97.         if verbose > 1:
  98.             print("[*] Writing domain supported list to %s") % (domain_filename)
  99.         for line in username_list:
  100.             email_address = line + "@" + domain
  101.             email_list.append(email_address)
  102.         with open(domain_filename, 'w') as file:
  103.             file.write('\n'.join(email_list))
  104.     return
  105.  
  106.  
  107. if __name__ == '__main__':
  108.     # If script is executed at the CLI
  109.     usage = '''usage: %(prog)s [-c census.xlsx] [-f output_filename] [-a append_filename] [-p prepend_filename] [-d domain_name] -q -v -vv -vvv'''
  110.     parser = argparse.ArgumentParser(usage=usage)
  111.     parser.add_argument("-c", "--census", type=str, help="The census file that will be used to create usernames, this can be retrieved like so:\n wget http://www2.census.gov/topics/genealogy/2000surnames/Top1000.xls", action="store", dest="census_file")
  112.     parser.add_argument("-f", "--filename", type=str, help="Filename for output the usernames", action="store", dest="filename")
  113.     parser.add_argument("-a","--append", type=str, action="store", help="A username list to append to the list generated from the census", dest="append_file")
  114.     parser.add_argument("-p","--prepend", type=str, action="store", help="A username list to prepend to the list generated from the census", dest="prepend_file")
  115.     parser.add_argument("-d","--domain", type=str, action="store", help="The domain to append to usernames", dest="domain_name")
  116.     parser.add_argument("-v", action="count", dest="verbose", default=1, help="Verbosity level, defaults to one, this outputs each command and result")
  117.     parser.add_argument("-q", action="store_const", dest="verbose", const=0, help="Sets the results to be quiet")
  118.     parser.add_argument('--version', action='version', version='%(prog)s 0.42b')
  119.     args = parser.parse_args()
  120.  
  121.     # Set Constructors
  122.     census_file = args.census_file   # Census
  123.     filename = args.filename         # Filename for outputs
  124.     verbose = args.verbose           # Verbosity level
  125.     append_file = args.append_file   # Filename for the appending usernames to the output file
  126.     prepend_file = args.prepend_file # Filename to prepend to the usernames to the output file
  127.     domain_name = args.domain_name   # The name of the domain to be appended to the username list
  128.     dir = os.getcwd()                # Get current working directory
  129.        
  130.     # Argument Validator
  131.     if len(sys.argv)==1:
  132.         parser.print_help()
  133.         sys.exit(1)
  134.     if append_file and prepend_file:
  135.         sys.exit("[!] Please select either prepend or append for a file not both")
  136.    
  137.     if not filename:
  138.         if os.name != "nt":
  139.              filename = dir + "/census_username_list"
  140.         else:
  141.              filename = dir + "\\census_username_list"
  142.     else:
  143.         if filename:
  144.             if "\\" or "/" in filename:
  145.                 if verbose > 1:
  146.                     print("[*] Using filename: %s") % (filename)
  147.         else:
  148.             if os.name != "nt":
  149.                 filename = dir + "/" + filename
  150.             else:
  151.                 filename = dir + "\\" + filename
  152.                 if verbose > 1:
  153.                     print("[*] Using filename: %s") % (filename)
  154.  
  155.     # Define working variables
  156.     sur_dict = {}
  157.     user_dict = {}
  158.     user_list = []
  159.     sup_username = []
  160.     target = []
  161.     combined_users = []
  162.  
  163.     # Process census file
  164.     if not census_file:
  165.         sys.exit("[!] You did not provide a census file!")
  166.     else:
  167.         sur_dict, user_dict, user_list = census_parser(census_file, verbose)
  168.  
  169.     # Process supplemental username file
  170.     if append_file or prepend_file:
  171.         sup_username, target = username_file_parser(prepend_file, append_file, verbose)
  172.         combined_users = combine_usernames(sup_username, target, user_list, verbose)
  173.     else:
  174.         combined_users = user_list
  175.  
  176.     write_username_file(combined_users, filename, domain_name, verbose)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement