Giter Club home page Giter Club logo

cupp's Introduction

CUPP - Common User Passwords Profiler

Build Status Coverage Status Codacy Badge Rawsec's CyberSecurity Inventory

About

The most common form of authentication is the combination of a username and a password or passphrase. If both match values stored within a locally stored table, the user is authenticated for a connection. Password strength is a measure of the difficulty involved in guessing or breaking the password through cryptographic techniques or library-based automated testing of alternate values.

A weak password might be very short or only use alphanumberic characters, making decryption simple. A weak password can also be one that is easily guessed by someone profiling the user, such as a birthday, nickname, address, name of a pet or relative, or a common word such as God, love, money or password.

That is why CUPP was born, and it can be used in situations like legal penetration tests or forensic crime investigations.

Requirements

You need Python 3 to run CUPP.

Quick start

$ python3 cupp.py -h

Options

Usage: cupp.py [OPTIONS]

    -h      this menu

    -i      Interactive questions for user password profiling

    -w      Use this option to profile existing dictionary,
            or WyD.pl output to make some pwnsauce :)

    -l      Download huge wordlists from repository

    -a      Parse default usernames and passwords directly from Alecto DB.
            Project Alecto uses purified databases of Phenoelit and CIRT which where merged and enhanced.

    -v      Version of the program

Configuration

CUPP has configuration file cupp.cfg with instructions.

Example (Fast forwarded)

cupp-example

License

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

See './LICENSE' for more information.

Github import

This project was imported into https://github.com/Mebus/cupp by Mebus from:
http://www.remote-exploit.org/content/cupp-3.0.tar.gz
http://www.remote-exploit.org/articles/misc_research__amp_code/index.html
to encourage further development of the tool.

Original author

Muris Kurgas aka j0rgan
[email protected]
http://www.remote-exploit.org
http://www.azuzi.me

Contributors

cupp's People

Contributors

anar4732 avatar cisbetter avatar codacy-badger avatar codepr avatar cooper-dale avatar edwardbetts avatar mebus avatar plex3r avatar quantumcore avatar shekhar12121 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cupp's Issues

Ran out of space

Use cupp.py -i to create a long wordlist and the modified it to concatenate all words. Soon realised it was madness and stopped it by ctrl+C and found that I lost 30 gb space. Could you tell me where do I delete that temporary file where all the words are stored? It is not there in my cupp folder.

C

X

New feature request

love the leet feature, would love if you could not make it an all or nothing. for example:

the password for the word "example" only gives one result other than itself "3x4mpl3"

would it be possible to generate multiples. ie.

example
3x4mpl3
3xample
3x4mple
3xampl3
ex4mpl3
etxc.

thanks

Suggestions about features

Hello! I would like to start by saying that I really like your program and think it´s really cool. :) I have 2 questions/suggestions. I will illustrate my suggestions with the example password: password1#

  1. For my project, I´ve been trying to include a clean # the [special chars] section of cupp.cfg. This doesn't work very well for me, since the # comments out the rest of the line, and if im using ´#´, '#' or something similar the output will be exactly this, for example: password1'#' and not password1# as i would prefer :) Do you have any recommendations on how to write the [special chars] to generate a # as possible combination?

  2. Option for [special chars] is only placing special characters last in the password combinations, is it possible to configure the script to place the special characters at the beginning of the word? for example: #!password1 instead of password1!# wich is the standard if following the cupp.py -i interface.

Have a nice day!

Simple new comination proposal (N+S+D.O.B.)

Hi,
first, cupp is cool piece of sw, thanks for it.

But I am courios if it is possible to add combination of First leater of names alon with numbers from D.O.B.

For Example:
Name=Jon
Surname=Doe
Date-of-birdt= 01.03.1975
Could result a password = jd1375 ... or jd010375, or jd1975...

This comination is pretty common I think. Anyway this will fit to My "very-old" passwords as well :-) But i'ts not generated by cupp i think.

Thanks,
Tomas

Download error for alectodb

The alectodb download fails. I just pulled your most recent code today and ran into this issue. Tried to find an answer to patch it myself but my python is lacking. Just passing it along.

command:
python3 cupp3.py -a
Result:
Traceback (most recent call last):
File "cupp3.py", line 723, in
main()
File "cupp3.py", line 59, in main
alectodb_download()
File "cupp3.py", line 573, in alectodb_download
local_file.write(web_file.read())
TypeError: write() argument must be str, not bytes

Combination of family members information

As an extension to the format proposed in issue #8, a password combination I know some people use is a concatenation of their immediate families initials and birthdays.

So for example: a target called Bob (born 20/02/1950), married to Alice (born 15/04/1950) with a child called Chris (born 10/03/1990) could yield something like abc201015 or a combination thereof using initials or other parts of the date of birth.

I've tried this example and something like this doesn't appear.

misssing lowercase combination

Hi, I tried the tool with a person whose password I already know. The password in question is nickname + last two digits of year of birth. When I tried the tool it only produced Nickname (first uppercase) + last two digits of year of birth. It would be cool to have a parameter that for every password generated includes its lowercase version

download databases

Hi, thank you very much for solving the ftp server issue so fast,
I really apreciate.
Now, I managed to download some, but most give me the output below.
As far as I understand, it means the files are not available for download doesn't it?

[+] downloading dico.Z...
Traceback (most recent call last):
File "cupp.py", line 1066, in
ftp.retrbinary('RETR ' + 'dico.Z', handleDownload)
File "/usr/lib/python2.7/ftplib.py", line 406, in retrbinary
conn = self.transfercmd(cmd, rest)
File "/usr/lib/python2.7/ftplib.py", line 368, in transfercmd
return self.ntransfercmd(cmd, rest)[0]
File "/usr/lib/python2.7/ftplib.py", line 331, in ntransfercmd
resp = self.sendcmd(cmd)
File "/usr/lib/python2.7/ftplib.py", line 244, in sendcmd
return self.getresp()
File "/usr/lib/python2.7/ftplib.py", line 219, in getresp
raise error_perm, resp
ftplib.error_perm: 550 Can't open dico.Z: No such file or directory

Suggestion - Missing case

I tried the tool and I realized that there is no combinations that starts with a number (birthday date) and continue with some words (such as name, surname or pet).
It is a very common case that you can include in this tool

python cupp.py not working

Hi
Whenever I try "python cupp.py", I get this:
Traceback (most recent call last):
File "cupp.py", line 37, in
import gzip
File "/usr/local/lib/python3.3/gzip.py", line 9, in
import zlib
ImportError: No module named 'zlib'

Numbers in front of name

Would be great if there is an option that would allow for numbers (specifically DOB and its combinations) to be placed in front of the name(s). CUPP has come close to including a few passwords in its lists but the name and DOB were reversed.

Cupp error

I have installed blackarch tools in vanilla archa and some extra tools such as cupp. I remember using it on kali and it used to work just fine but when i try to run the cupp.py file on arch now i get the following error:
File "cupp.py", line 99 print "[+] Saving dictionary to \033[1;31m"+filename+"\033[1;m, counting \033[1;31m"+str(lines)+" words.\033[1;m" ^ SyntaxError: invalid syntax

Error when running test_cupp.py on windows

I've ran the test_cupp.py with Python 3.7.3 (and 3.6.8) and it has come up with the following error:

ERROR: test_generate_wordlist_from_profile (main.TestCupp)

Traceback (most recent call last):
File "test_cupp.py", line 66, in test_generate_wordlist_from_profile
generate_wordlist_from_profile(profile)
File "C:\Users\josipp\Downloads\cupp\cupp.py", line 691, in generate_wordlist_from_profile
print_to_file(profile["name"] + ".txt", unique_list_finished)
File "C:\Users\josipp\Downloads\cupp\cupp.py", line 122, in print_to_file
f.write(os.linesep.join(unique_list_finished))
File "C:\Python34\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 38696-38700: >character maps to <undefined>

When I run it on Ubuntu (Python 3.6.9 version) it is able to complete all the tests and give me the "OK" message at the end. I'm not sure if I'm doing anything wrong when running it on Windows. What should I do for all tests to work?

In both cases cupp.py works.

Thank you in advance for replying!

Error parsing '#'

Hi, I found and error, when I improve a wordlist with the '#' character the first 2 passwords are:

1 - '#''#''#'
2 - '#''#''#'

And the passwords with the '#' are:
1 - examplePassword'#'
Instead of:
1 - examplePassword#

I made a very simple script in python to fix that after the generation of passwords, but it would be nice if it could create them properly at once

Can't add leet, can't use cupp3.py

Hi,
I just tried this script and first of all, I wondered if it is possible to use cupp3.py?
Because when I try to use it I have an error message:
~/CUPP/cupp# python cupp3.py -i
File "cupp3.py", line 147
print("\n- You must enter a name at least!", file=sys.stderr)

And if the answer is yes, is it better to use cupp.py or cupp3.py ?

Moreover, I tried to add a leet for a=@, but i failed to actually implement it:
I tried to modify the cupp.py file in the 3 different places it is needed to by adding those lines:
a2 = config.get('leet','a')
x = x.replace('a',a2)
x = x.replace('a',a2)
But it didn't work, the 'a' were only changed in '4', but not in '@'.
Can someone explain me how to do it properly?

new option

please add a new option that let to do:
lastname+firstname

exemple: first name: lucas
last name: river

result in the wordlist created : riverlucas

somethings like this , i hope you ll understand :)

cupp -l -a errors

Good day,

I did a fresh install of cupp.py on the newest version (4.7) of parrot sec OS. Cupp starts just fine and I can use it in interactive mode, etc to make targeted wordlists. When I use:

cupp -l

I get a socket error.

When I run cupp -a to download the username and password lists from the database I get a network was unreachable error message.

I have successfully used these tools in the past with no issue. Any help would be appreciated.

New Option

It would be great if you could add an update option.

Problem downloading Alecto DB

Hi,

Thank you for this tool, it seems really interesting.

I have an error message when I try the -a option of this tool. The tool try to download Alecto DB but after some time I have the following error :

IOError: [Errno socket error] [Errno 110] Connection timed out

Where did it come from? Someone has an idea?

Thank you for your help!

dowlaod wordlists

Hi, I have just installed cup, and when I try to download wordlist, I get this error message.
[+] connecting...
Traceback (most recent call last):
File "cupp.py", line 905, in
ftp = ftplib.FTP(ftpurl)
File "/usr/lib/python2.7/ftplib.py", line 117, in init
self.connect(host)
File "/usr/lib/python2.7/ftplib.py", line 132, in connect
self.sock = socket.create_connection((self.host, self.port), self.timeout)
File "/usr/lib/python2.7/socket.py", line 553, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
socket.gaierror: [Errno -2] Name or service not known

Can you help me resolve the issue?
Thank you for your help.

NoSectionError when running CUPP

I'm running CUPP on Windows using Cygwin (bash terminal). I have it installed at C:\cupp, and have added it to the PATH environment variable. When doing cupp.py in bash, I get the following error:

Traceback (most recent call last):
  File "/cygdrive/c/cupp/cupp.py", line 50, in <module>
    years = config.get('years', 'years').split(',')
  File "/usr/lib/python2.7/ConfigParser.py", line 607, in get
    raise NoSectionError(section)
ConfigParser.NoSectionError: No section: 'years'

By the looks of it, it may have something to do with the configuration file cupp.cfg, but that's all I can tell.

Most common passwords 2018

People today use a new password combination
I would like this kind of combination to be added to the CUPP

(E.g) name.surname
        name.DDMMYYYY
name.DD
name.DDMM
name.YYYY
        
If someone knows how to configure the script in the way I'm asking above, I was very grateful for this

Thanks
Mr. Eagle out

Can't run cupp

Whenever I'm in the cupp folder, and I do 'python cupp.py' its prints this out:
Traceback (most recent call last):
File "cupp.py", line 40, in
import urllib.error
ImportError: No module named error

I reinstalled Kali Linux, reinstalled cupp and it's still not working.

Not All Keywords showing up in dictionary

[+] Insert the information about the victim to make a dictionary
[+] If you don't know all the info, just hit enter when asked! ;)

First Name: Jordan
Surname: Sosnowski
Nickname:
Birthdate (DDMMYYYY):

Partners) name:
Partners) nickname:
Partners) birthdate (DDMMYYYY):

Child's name:
Child's nickname:
Child's birthdate (DDMMYYYY):

Pet's name:
Company name:

Do you want to add some key words about the victim? Y/[N]: y
Please enter the words, separated by comma. [i.e. hacker,juice,black], spaces will be removed: software engineer, programmer, hacker, kick, japan, leet
Do you want to add special chars at the end of words? Y/[N]: n
Do you want to add some random numbers at the end of words? Y/[N]:n
Leet mode? (i.e. leet = 1337) Y/[N]: n

[+] Now making a dictionary...
[+] Sorting list and removing duplicates...
[+] Saving dictionary to �[1;31mjordan.txt�[1;m, counting �[1;31m667 words.�[1;m
[+] Now load your pistolero with �[1;31mjordan.txt�[1;m and shoot! Good luck!

If you look at the jordan.txt file softwareengineer is not there nor is plain kick. Shouldn't there be a version of those there? And then the additional ones with added numbers.

jordan.txt

Inventory notification

Your tool/software has been inventoried on Rawsec's CyberSecurity Inventory.

What is Rawsec's CyberSecurity Inventory?

An inventory of tools and resources about CyberSecurity. This inventory aims to help people to find everything related to CyberSecurity.

  • Open source: Every information is available and up to date. If an information is missing or deprecated, you are invited to (help us).
  • Practical: Content is categorized and table formatted, allowing to search, browse, sort and filter.
  • Fast: Using static and client side technologies resulting in fast browsing.
  • Rich tables: search, sort, browse, filter, clear
  • Fancy informational popups
  • Badges / Shields
  • Static API
  • Twitter bot

More details about features here.

Note: the inventory is a FLOSS (Free, Libre and Open-Source Software) project.

Why?

  • Specialized websites: Some websites are referencing tools but additional information is not available or browsable. Make additional searches take time.
  • Curated lists: Curated lists are not very exhaustive, up to date or browsable and are very topic related.
  • Search engines: Search engines sometimes does find nothing, some tools or resources are too unknown or non-referenced. These is where crowdsourcing is better than robots.

Why should you care about being inventoried?

Mainly because this is giving visibility to your tool, more and more people are using the Rawsec's CyberSecurity Inventory, this helps them find what they need.

Badges

The badge shows to your community that your are inventoried. This also shows you care about your project and want it growing, that your tool is not an abandonware.

Feel free to claim your badge here: http://inventory.rawsec.ml/features.html#badges, it looks like that Rawsec's CyberSecurity Inventory, but there are several styles available.

So what?

That's all, this message is just to notify you if you care.

length of password

PLease increase the leanth of the password..upto 15 or more alphabates

Leet mode does not work

The make_leet definition should be changed on line 88 from
x.replace(letter, leetletter)
to
x = x.replace(letter, leetletter)
to make it works.

Thanks.

Please add Phone Number field

It would be a more realistic wordlist if it has mobile number and landline number as fields and can create combination of these and the previous output

Adding to 1337 mode

Hi guys,
Just thought I'd let you know that when I try to add to leet mode, cupp completely disregards the new input. I have edited both the config file and the cupp.py file. I am trying to add l=1 and a=@ but also keeping the default values there too.

Here is the code in the cupp.cfg and cupp.py file if you guys need it. Also I am aware that the entry for a=@ isn't in the code, but what is the point if I can't get it to work with l=1

Also sorry for the super long post, if there is a way to upload the files then I would do it. (there probably is im just new here lol)

cupp.cfg
`# [ cupp.cfg ]

This is configuration file for cupp.py

There are no options to configure the application within it. The app reads it,

does not change it. I'm hoping you'll figure out how to looking at this.

[ 1337 mode ]

If you think this default settings are not right,

you can change it for yourself. For example if you

don't like a=4, just change it to a=@ :)

If you don't need some chars, just comment it! Duplicates are allowed too.

For adding chars, you might need to add some lines in cupp.py...

[years]
years = 2008,2009,2010,2011,2012,2013,2014,2015,2016,2017

[leet]
a=4
i=1
e=3
t=7
o=0
s=5
g=9
z=2
l=1

[ Special chars ] for adding some pwnsauce! Remove or add as necessary,

separated by comma

[specialchars]
chars=!,@,'#',$,%%,&,*

[ Random years ] take it as much as you need!

[ Random numbers ]

In this default setting, numbers from 0 to 100 will be added to all words

compiled by cupp.py

[nums]
from=0
to=100

[ Word length shaping ]

This setting will exclude words from compiled wordlist that are shorter

than [wcfrom] and longer than [wcto].

wcfrom=5
wcto=12

[ Threshold ]

Threshold setting for word concatenations parsed from existing wordlist

(using -w option).

For example, from 200 words CUPP will compile 200*200=40,000 new words.

Increasing this level may cause high memory consumption, be careful.

threshold=200

[ Wordlist config ]

[alecto]
alectourl=http://www.helith.net/projects/alecto/alectodb.csv.gz

[downloader]
ftpname=FUNET
ftpurl=ftp.funet.fi
ftppath=/pub/unix/security/passwd/crack/dictionaries/
ftpuser=anonymous
ftppass=cupp3`

cupp.py
`#!/usr/bin/python

[Program]

CUPP 3.1.0-alpha

Common User Passwords Profiler

[Author]

Muris Kurgas aka j0rgan

j0rgan [at] remote-exploit [dot] org

http://www.remote-exploit.org

http://www.azuzi.me

[License]

This program is free software; you can redistribute it and/or modify

it under the terms of the GNU General Public License as published by

the Free Software Foundation; either version 3 of the License, or

any later version.

This program is distributed in the hope that it will be useful,

but WITHOUT ANY WARRANTY; without even the implied warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

GNU General Public License for more details.

You should have received a copy of the GNU General Public License

along with this program; if not, write to the Free Software

Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

See 'docs/LICENSE' for more information.

import sys
import os
import ftplib
import ConfigParser
import urllib
import gzip
import csv

Reading configuration file...

config = ConfigParser.ConfigParser()
config.read('/etc/cupp.cfg')

years = config.get('years', 'years').split(',')
chars = config.get('specialchars', 'chars').split(',')

numfrom = config.getint('nums','from')
numto = config.getint('nums','to')

wcfrom = config.getint('nums','wcfrom')
wcto = config.getint('nums','wcto')

threshold = config.getint('nums','threshold')

1337 mode configs, well you can add more lines if you add it to config file too.

You will need to add more lines in two places in cupp.py code as well...

a = config.get('leet','a')
i = config.get('leet','i')
e = config.get('leet','e')
t = config.get('leet','t')
o = config.get('leet','o')
s = config.get('leet','s')
g = config.get('leet','g')
z = config.get('leet','z')
l = config.get('leet','l')

for concatenations...

def concats(seq, start, stop):
for mystr in seq:
for num in xrange(start, stop):
yield mystr + str(num)

for sorting and making combinations...

def komb(seq, start, special = ""):
for mystr in seq:
for mystr1 in start:
yield mystr + special + mystr1

print list to file counting words

def print_to_file(filename, unique_list_finished):
f = open ( filename, 'w' )
unique_list_finished.sort()
f.write (os.linesep.join(unique_list_finished))
f = open ( filename, 'r' )
lines = 0
for line in f:
lines += 1
f.close()
print "[+] Saving dictionary to \033[1;31m"+filename+"\033[1;m, counting \033[1;31m"+str(lines)+" words.\033[1;m"
print "[+] Now load your pistolero with \033[1;31m"+filename+"\033[1;m and shoot! Good luck!"

if len(sys.argv) < 2 or sys.argv[1] == '-h':
print " ___________ "
print " \033[07m cupp.py! \033[27m # Common"
print " \ # User"
print " \ \033[1;31m,,\033[1;m # Passwords"
print " \ \033[1;31m(\033[1;moo\033[1;31m)____\033[1;m # Profiler"
print " \033[1;31m(
) )\ \033[1;m "
print " \033[1;31m ||--|| \033[1;m\033[05m*\033[25m\033[1;m [ Muris Kurgas | [email protected] ]\r\n\r\n"

print "	[ Options ]\r\n"
print "	-h	You are looking at it baby! :)"
print " 		 For more help take a look in docs/README"
print "		 Global configuration file is cupp.cfg\n"

print "	-i	Interactive questions for user password profiling\r\n"

print "	-w	Use this option to improve existing dictionary,"
print "		 or WyD.pl output to make some pwnsauce\r\n"

print "	-l	Download huge wordlists from repository\r\n"
print "	-a	Parse default usernames and passwords directly from Alecto DB."
print "		 Project Alecto uses purified databases of Phenoelit and CIRT"
print "		 which where merged and enhanced.\r\n"
print "	-v	Version of the program\r\n"
exit()

elif sys.argv[1] == '-v':
print "\r\n \033[1;31m[ cupp.py ] v3.1.0-alpha\033[1;m\r\n"
print " * Hacked up by j0rgan - [email protected]"
print " * http://www.remote-exploit.org\r\n"
print " Take a look ./README.md file for more info about the program\r\n"
exit()

elif sys.argv[1] == '-w':
if len(sys.argv) < 3:
print "\r\n[Usage]: "+sys.argv[0]+" -w [FILENAME]\r\n"
exit()
fajl = open(sys.argv[2], "r")
listic = fajl.readlines()
linije = 0
for line in listic:
linije += 1

listica = []
for x in listic:
	listica += x.split()

print "\r\n      *************************************************"
print "      *                    \033[1;31mWARNING!!!\033[1;m                 *"
print "      *         Using large wordlists in some         *"
print "      *       options bellow is NOT recommended!      *"
print "      *************************************************\r\n"

conts = raw_input("> Do you want to concatenate all words from wordlist? Y/[N]: ").lower()



if conts == "y" and linije > threshold:
	print "\r\n[-] Maximum number of words for concatenation is "+str(threshold)
	print "[-] Check configuration file for increasing this number.\r\n"
	conts = raw_input("> Do you want to concatenate all words from wordlist? Y/[N]: ").lower()
conts = conts
cont = ['']
if conts == "y":
	for cont1 in listica:
		for cont2 in listica:
			if listica.index(cont1) != listica.index(cont2):
				cont.append(cont1+cont2)

spechars = ['']
spechars1 = raw_input("> Do you want to add special chars at the end of words? Y/[N]: ").lower()
if spechars1 == "y":
	for spec1 in chars:
		spechars.append(spec1)
		for spec2 in chars:
			spechars.append(spec1+spec2)
			for spec3 in chars:
				spechars.append(spec1+spec2+spec3)

randnum = raw_input("> Do you want to add some random numbers at the end of words? Y/[N]:").lower()
leetmode = raw_input("> Leet mode? (i.e. leet = 1337) Y/[N]: ").lower()


kombinacija1 = list(komb(listica, years))
kombinacija2 = ['']
if conts == "y":
	kombinacija2 = list(komb(cont, years))
kombinacija3 = ['']
kombinacija4 = ['']
if spechars1 == "y":
	kombinacija3 = list(komb(listica, spechars))
	if conts == "y":
		kombinacija4 = list(komb(cont, spechars))
kombinacija5 = ['']
kombinacija6 = ['']
if randnum == "y":
	kombinacija5 = list(concats(listica, numfrom, numto))
	if conts == "y":
		kombinacija6 = list(concats(cont, numfrom, numto))

print "\r\n[+] Now making a dictionary..."

print "[+] Sorting list and removing duplicates..."

komb_unique1 = dict.fromkeys(kombinacija1).keys()
komb_unique2 = dict.fromkeys(kombinacija2).keys()
komb_unique3 = dict.fromkeys(kombinacija3).keys()
komb_unique4 = dict.fromkeys(kombinacija4).keys()
komb_unique5 = dict.fromkeys(kombinacija5).keys()
komb_unique6 = dict.fromkeys(kombinacija6).keys()
komb_unique7 = dict.fromkeys(listica).keys()
komb_unique8 = dict.fromkeys(cont).keys()

uniqlist = komb_unique1+komb_unique2+komb_unique3+komb_unique4+komb_unique5+komb_unique6+komb_unique7+komb_unique8

unique_lista = dict.fromkeys(uniqlist).keys()
unique_leet = []
if leetmode == "y":
	for x in unique_lista: # if you want to add more leet chars, you will need to add more lines in cupp.cfg too...
		x = x.replace('a',a)
		x = x.replace('i',i)
		x = x.replace('e',e)
		x = x.replace('t',t)
		x = x.replace('o',o)
		x = x.replace('s',s)
		x = x.replace('g',g)
		x = x.replace('z',z)
		x = x.replace('l',l)
		unique_leet.append(x)

unique_list = unique_lista + unique_leet

unique_list_finished = []

unique_list_finished = [x for x in unique_list if len(x) > wcfrom and len(x) < wcto]

print_to_file(sys.argv[2]+'.cupp.txt', unique_list_finished)

fajl.close()
exit()

elif sys.argv[1] == '-i':
print "\r\n[+] Insert the informations about the victim to make a dictionary"
print "[+] If you don't know all the info, just hit enter when asked! ;)\r\n"

We need some informations first!

name = raw_input("> First Name: ").lower()
while len(name) == 0 or name == " " or name == "  " or name == "   ":
	print "\r\n[-] You must enter a name at least!"
	name = raw_input("> Name: ").lower()
name = str(name)

surname = raw_input("> Surname: ").lower()
nick = raw_input("> Nickname: ").lower()
birthdate = raw_input("> Birthdate (DDMMYYYY): ")
while len(birthdate) != 0 and len(birthdate) != 8:
	print "\r\n[-] You must enter 8 digits for birthday!"
	birthdate = raw_input("> Birthdate (DDMMYYYY): ")
birthdate = str(birthdate)

print "\r\n"

wife = raw_input("> Partners) name: ").lower()
wifen = raw_input("> Partners) nickname: ").lower()
wifeb = raw_input("> Partners) birthdate (DDMMYYYY): ")
while len(wifeb) != 0 and len(wifeb) != 8:
	print "\r\n[-] You must enter 8 digits for birthday!"
	wifeb = raw_input("> Partners birthdate (DDMMYYYY): ")
wifeb = str(wifeb)
print "\r\n"

kid = raw_input("> Child's name: ").lower()
kidn = raw_input("> Child's nickname: ").lower()
kidb = raw_input("> Child's birthdate (DDMMYYYY): ")
while len(kidb) != 0 and len(kidb) != 8:
	print "\r\n[-] You must enter 8 digits for birthday!"
	kidb = raw_input("> Child's birthdate (DDMMYYYY): ")
kidb = str(kidb)
print "\r\n"

pet = raw_input("> Pet's name: ").lower()
company = raw_input("> Company name: ").lower()
print "\r\n"

words = ['']
words1 = raw_input("> Do you want to add some key words about the victim? Y/[N]: ").lower()
words2 = ""
if words1 == "y":
	words2 = raw_input("> Please enter the words, separated by comma. [i.e. hacker,juice,black], spaces will be removed: ").replace(" ","")
words = words2.split(",")

spechars = ['']
spechars1 = raw_input("> Do you want to add special chars at the end of words? Y/[N]: ").lower()
if spechars1 == "y":
	for spec1 in chars:
		spechars.append(spec1)
		for spec2 in chars:
			spechars.append(spec1+spec2)
			for spec3 in chars:
				spechars.append(spec1+spec2+spec3)

randnum = raw_input("> Do you want to add some random numbers at the end of words? Y/[N]:").lower()
leetmode = raw_input("> Leet mode? (i.e. leet = 1337) Y/[N]: ").lower()


print "\r\n[+] Now making a dictionary..."

Now me must do some string modifications...

Birthdays first

birthdate_yy = birthdate[-2:]
birthdate_yyy = birthdate[-3:]
birthdate_yyyy = birthdate[-4:]
birthdate_xd = birthdate[1:2]
birthdate_xm = birthdate[3:4]
birthdate_dd = birthdate[:2]
birthdate_mm = birthdate[2:4]

wifeb_yy = wifeb[-2:]
wifeb_yyy = wifeb[-3:]
wifeb_yyyy = wifeb[-4:]
wifeb_xd = wifeb[1:2]
wifeb_xm = wifeb[3:4]
wifeb_dd = wifeb[:2]
wifeb_mm = wifeb[2:4]

kidb_yy = kidb[-2:]
kidb_yyy = kidb[-3:]
kidb_yyyy = kidb[-4:]
kidb_xd = kidb[1:2]
kidb_xm = kidb[3:4]
kidb_dd = kidb[:2]
kidb_mm = kidb[2:4]


# Convert first letters to uppercase...

nameup = name.title()
surnameup = surname.title()
nickup = nick.title()
wifeup = wife.title()
wifenup = wifen.title()
kidup = kid.title()
kidnup = kidn.title()
petup = pet.title()
companyup = company.title()

wordsup = []
wordsup = map(str.title, words)

word = words+wordsup

# reverse a name

rev_name = name[::-1]
rev_nameup = nameup[::-1]
rev_nick = nick[::-1]
rev_nickup = nickup[::-1]
rev_wife = wife[::-1]
rev_wifeup = wifeup[::-1]
rev_kid = kid[::-1]
rev_kidup = kidup[::-1]

reverse = [rev_name, rev_nameup, rev_nick, rev_nickup, rev_wife, rev_wifeup, rev_kid, rev_kidup]
rev_n = [rev_name, rev_nameup, rev_nick, rev_nickup]
rev_w = [rev_wife, rev_wifeup]
rev_k = [rev_kid, rev_kidup]
# Let's do some serious work! This will be a mess of code, but... who cares? :)

# Birthdays combinations

bds = [birthdate_yy, birthdate_yyy, birthdate_yyyy, birthdate_xd, birthdate_xm, birthdate_dd, birthdate_mm]

bdss = []

for bds1 in bds:
	bdss.append(bds1)
	for bds2 in bds:
		if bds.index(bds1) != bds.index(bds2):
			bdss.append(bds1+bds2)
			for bds3 in bds:
				if bds.index(bds1) != bds.index(bds2) and bds.index(bds2) != bds.index(bds3) and bds.index(bds1) != bds.index(bds3):
					bdss.append(bds1+bds2+bds3)



# For a woman...
wbds = [wifeb_yy, wifeb_yyy, wifeb_yyyy, wifeb_xd, wifeb_xm, wifeb_dd, wifeb_mm]

wbdss = []

for wbds1 in wbds:
	wbdss.append(wbds1)
	for wbds2 in wbds:
		if wbds.index(wbds1) != wbds.index(wbds2):
			wbdss.append(wbds1+wbds2)
			for wbds3 in wbds:
				if wbds.index(wbds1) != wbds.index(wbds2) and wbds.index(wbds2) != wbds.index(wbds3) and wbds.index(wbds1) != wbds.index(wbds3):
					wbdss.append(wbds1+wbds2+wbds3)



# and a child...
kbds = [kidb_yy, kidb_yyy, kidb_yyyy, kidb_xd, kidb_xm, kidb_dd, kidb_mm]

kbdss = []

for kbds1 in kbds:
	kbdss.append(kbds1)
	for kbds2 in kbds:
		if kbds.index(kbds1) != kbds.index(kbds2):
			kbdss.append(kbds1+kbds2)
			for kbds3 in kbds:
				if kbds.index(kbds1) != kbds.index(kbds2) and kbds.index(kbds2) != kbds.index(kbds3) and kbds.index(kbds1) != kbds.index(kbds3):
					kbdss.append(kbds1+kbds2+kbds3)

# string combinations....

kombinaac = [pet, petup, company, companyup]

kombina = [name, surname, nick, nameup, surnameup, nickup]

kombinaw = [wife, wifen, wifeup, wifenup, surname, surnameup]

kombinak = [kid, kidn, kidup, kidnup, surname, surnameup]

kombinaa = []
for kombina1 in kombina:
	kombinaa.append(kombina1)
	for kombina2 in kombina:
		if kombina.index(kombina1) != kombina.index(kombina2) and kombina.index(kombina1.title()) != kombina.index(kombina2.title()):
			kombinaa.append(kombina1+kombina2)

kombinaaw = []
for kombina1 in kombinaw:
	kombinaaw.append(kombina1)
	for kombina2 in kombinaw:
		if kombinaw.index(kombina1) != kombinaw.index(kombina2) and kombinaw.index(kombina1.title()) != kombinaw.index(kombina2.title()):
			kombinaaw.append(kombina1+kombina2)

kombinaak = []
for kombina1 in kombinak:
	kombinaak.append(kombina1)
	for kombina2 in kombinak:
		if kombinak.index(kombina1) != kombinak.index(kombina2) and kombinak.index(kombina1.title()) != kombinak.index(kombina2.title()):
			kombinaak.append(kombina1+kombina2)



komb1 = list(komb(kombinaa, bdss))
komb1 += list(komb(kombinaa, bdss, "_"))
komb2 = list(komb(kombinaaw, wbdss))
komb2 += list(komb(kombinaaw, wbdss, "_"))
komb3 = list(komb(kombinaak, kbdss))
komb3 += list(komb(kombinaak, kbdss, "_"))
komb4 = list(komb(kombinaa, years))
komb4 += list(komb(kombinaa, years, "_"))
komb5 = list(komb(kombinaac, years))
komb5 += list(komb(kombinaac, years, "_"))
komb6 = list(komb(kombinaaw, years))
komb6 += list(komb(kombinaaw, years, "_"))
komb7 = list(komb(kombinaak, years))
komb7 += list(komb(kombinaak, years, "_"))
komb8 = list(komb(word, bdss))
komb8 += list(komb(word, bdss, "_"))
komb9 = list(komb(word, wbdss))
komb9 += list(komb(word, wbdss, "_"))
komb10 = list(komb(word, kbdss))
komb10 += list(komb(word, kbdss, "_"))
komb11 = list(komb(word, years))
komb11 += list(komb(word, years, "_"))
komb12 = ['']
komb13 = ['']
komb14 = ['']
komb15 = ['']
komb16 = ['']
komb21 = ['']
if randnum == "y":
	komb12 = list(concats(word, numfrom, numto))
	komb13 = list(concats(kombinaa, numfrom, numto))
	komb14 = list(concats(kombinaac, numfrom, numto))
	komb15 = list(concats(kombinaaw, numfrom, numto))
	komb16 = list(concats(kombinaak, numfrom, numto))
	komb21 = list(concats(reverse, numfrom, numto))
komb17 = list(komb(reverse, years))
komb17 += list(komb(reverse, years, "_"))
komb18 = list(komb(rev_w, wbdss))
komb18 += list(komb(rev_w, wbdss, "_"))
komb19 = list(komb(rev_k, kbdss))
komb19 += list(komb(rev_k, kbdss, "_"))
komb20 = list(komb(rev_n, bdss))
komb20 += list(komb(rev_n, bdss, "_"))
komb001 = ['']
komb002 = ['']
komb003 = ['']
komb004 = ['']
komb005 = ['']
komb006 = ['']
if spechars1 == "y":
	komb001 = list(komb(kombinaa, spechars))
	komb002 = list(komb(kombinaac, spechars))
	komb003 = list(komb(kombinaaw , spechars))
	komb004 = list(komb(kombinaak , spechars))
	komb005 = list(komb(word, spechars))
	komb006 = list(komb(reverse, spechars))

print "[+] Sorting list and removing duplicates..."

komb_unique1 = dict.fromkeys(komb1).keys()
komb_unique2 = dict.fromkeys(komb2).keys()
komb_unique3 = dict.fromkeys(komb3).keys()
komb_unique4 = dict.fromkeys(komb4).keys()
komb_unique5 = dict.fromkeys(komb5).keys()
komb_unique6 = dict.fromkeys(komb6).keys()
komb_unique7 = dict.fromkeys(komb7).keys()
komb_unique8 = dict.fromkeys(komb8).keys()
komb_unique9 = dict.fromkeys(komb9).keys()
komb_unique10 = dict.fromkeys(komb10).keys()
komb_unique11 = dict.fromkeys(komb11).keys()
komb_unique12 = dict.fromkeys(komb12).keys()
komb_unique13 = dict.fromkeys(komb13).keys()
komb_unique14 = dict.fromkeys(komb14).keys()
komb_unique15 = dict.fromkeys(komb15).keys()
komb_unique16 = dict.fromkeys(komb16).keys()
komb_unique17 = dict.fromkeys(komb17).keys()
komb_unique18 = dict.fromkeys(komb18).keys()
komb_unique19 = dict.fromkeys(komb19).keys()
komb_unique20 = dict.fromkeys(komb20).keys()
komb_unique21 = dict.fromkeys(komb21).keys()
komb_unique01 = dict.fromkeys(kombinaa).keys()
komb_unique02 = dict.fromkeys(kombinaac).keys()
komb_unique03 = dict.fromkeys(kombinaaw).keys()
komb_unique04 = dict.fromkeys(kombinaak).keys()
komb_unique05 = dict.fromkeys(word).keys()
komb_unique07 = dict.fromkeys(komb001).keys()
komb_unique08 = dict.fromkeys(komb002).keys()
komb_unique09 = dict.fromkeys(komb003).keys()
komb_unique010 = dict.fromkeys(komb004).keys()
komb_unique011 = dict.fromkeys(komb005).keys()
komb_unique012 = dict.fromkeys(komb006).keys()

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

unique_lista = dict.fromkeys(uniqlist).keys()
unique_leet = []
if leetmode == "y":
	for x in unique_lista: # if you want to add more leet chars, you will need to add more lines in cupp.cfg too...
		x = x.replace('a',a)
		x = x.replace('i',i)
		x = x.replace('e',e)
		x = x.replace('t',t)
		x = x.replace('o',o)
		x = x.replace('s',s)
		x = x.replace('g',g)
		x = x.replace('z',z)
		x = x.replace('l',l)
		unique_leet.append(x)

unique_list = unique_lista + unique_leet

unique_list_finished = []
unique_list_finished = [x for x in unique_list if len(x) < wcto and len(x) > wcfrom]

print_to_file(name+'.txt', unique_list_finished)
exit()

elif sys.argv[1] == '-a':
url = config.get('alecto','alectourl')

print "\r\n[+] Checking if alectodb is not present..."
if os.path.isfile('alectodb.csv.gz') == 0:
	print "[+] Downloading alectodb.csv.gz..."
	webFile = urllib.urlopen(url)
	localFile = open(url.split('/')[-1], 'w')
	localFile.write(webFile.read())
	webFile.close()
	localFile.close()


f = gzip.open('alectodb.csv.gz', 'rb')

data = csv.reader(f)

usernames = []
passwords = []
for row in data:
	usernames.append(row[5])
	passwords.append(row[6])
gus = list(set(usernames))
gpa = list(set(passwords))
gus.sort()
gpa.sort()

print "\r\n[+] Exporting to alectodb-usernames.txt and alectodb-passwords.txt\r\n[+] Done."
f = open ( 'alectodb-usernames.txt', 'w' )
f.write (os.linesep.join(gus))
f.close()

f = open ( 'alectodb-passwords.txt', 'w' )
f.write (os.linesep.join(gpa))
f.close()


f.close()
sys.exit()

elif sys.argv[1] == '-l':

ftpname = config.get('downloader','ftpname')
ftpurl = config.get('downloader','ftpurl')
ftppath = config.get('downloader','ftppath')
ftpuser = config.get('downloader','ftpuser')
ftppass = config.get('downloader','ftppass')


if os.path.isdir('dictionaries') == 0:
	os.mkdir('dictionaries')

print "	\r\n	Choose the section you want to download:\r\n"

print "     1   Moby            14      french          27      places"
print "     2   afrikaans       15      german          28      polish"
print "     3   american        16      hindi           39      random"
print "     4   aussie          17      hungarian       30      religion"
print "     5   chinese         18      italian         31      russian"
print "     6   computer        19      japanese        32      science"
print "     7   croatian        20      latin           33      spanish"
print "     8   czech           21      literature      34      swahili"
print "     9   danish          22      movieTV         35      swedish"
print "    10   databases       23      music           36      turkish"
print "    11   dictionaries    24      names           37      yiddish"
print "    12   dutch           25      net             38      exit program"
print "    13   finnish         26      norwegian       \r\n"
print "	\r\n	Files will be downloaded from "+ftpname+" repository"
print "	\r\n	Tip: After downloading wordlist, you can improve it with -w option\r\n"

filedown = raw_input("> Enter number: ")
filedown.isdigit()
while filedown.isdigit() == 0:
	print "\r\n[-] Wrong choice. "
	filedown = raw_input("> Enter number: ")
filedown = str(filedown)
while int(filedown) > 38:
	print "\r\n[-] Wrong choice. "
	filedown = raw_input("> Enter number: ")
filedown = str(filedown)


def handleDownload(block):
	file.write(block)
	print ".",

def downloader():
	ftp.login(ftpuser, ftppass)
	ftp.cwd(ftppath)

def filequitter():
	file.close()
	print ' done.'


if filedown == "1":
	print "\r\n[+] connecting...\r\n"
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('Moby')
	if os.path.isdir('dictionaries/Moby/') == 0:
		os.mkdir('dictionaries/Moby/')
	dire = 'dictionaries/Moby/'
	file = open(dire+'mhyph.tar.gz', 'wb')
	print "\r\n[+] downloading mhyph.tar.gz..."
	ftp.retrbinary('RETR ' + 'mhyph.tar.gz', handleDownload)
	filequitter()

	file = open(dire+'mlang.tar.gz', 'wb')
	print "\r\n[+] downloading mlang.tar.gz..."
	ftp.retrbinary('RETR ' + 'mlang.tar.gz', handleDownload)
	filequitter()

	file = open(dire+'moby.tar.gz', 'wb')
	print "\r\n[+] downloading moby.tar.gz..."
	ftp.retrbinary('RETR ' + 'moby.tar.gz', handleDownload)
	filequitter()

	file = open(dire+'mpos.tar.gz', 'wb')
	print "\r\n[+] downloading mpos.tar.gz..."
	ftp.retrbinary('RETR ' + 'mpos.tar.gz', handleDownload)
	filequitter()

	file = open(dire+'mpron.tar.gz', 'wb')
	print "\r\n[+] downloading mpron.tar.gz..."
	ftp.retrbinary('RETR ' + 'mpron.tar.gz', handleDownload)
	filequitter()

	file = open(dire+'mthes.tar.gz', 'wb')
	print "\r\n[+] downloading mthes.tar.gz..."
	ftp.retrbinary('RETR ' + 'mthes.tar.gz', handleDownload)
	filequitter()

	file = open(dire+'mwords.tar.gz', 'wb')
	print "\r\n[+] downloading mwords.tar.gz..."
	ftp.retrbinary('RETR ' + 'mwords.tar.gz', handleDownload)
	filequitter()

	print '[+] files saved to '+ dire
	ftp.quit()
	exit()

if filedown == "2":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('afrikaans')
	if os.path.isdir('dictionaries/afrikaans/') == 0:
		os.mkdir('dictionaries/afrikaans/')
	dire = 'dictionaries/afrikaans/'

	file = open(dire+'afr_dbf.zip', 'wb')
	print "\r\n[+] downloading afr_dbf.zip..."
	ftp.retrbinary('RETR ' + 'afr_dbf.zip', handleDownload)
	filequitter()

	print '[+] file saved to '+ dire
	ftp.quit()
	exit()

if filedown == "3":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('american')
	if os.path.isdir('dictionaries/american/') == 0:
		os.mkdir('dictionaries/american/')
	dire = 'dictionaries/american/'

	file = open(dire+'dic-0294.tar.gz', 'wb')
	print "\r\n[+] downloading dic-0294.tar.gz..."
	ftp.retrbinary('RETR ' + 'dic-0294.tar.gz', handleDownload)
	filequitter()

	print '[+] file saved to '+ dire
	ftp.quit()
	exit()

if filedown == "4":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('aussie')
	if os.path.isdir('dictionaries/aussie/') == 0:
		os.mkdir('dictionaries/aussie/')
	dire = 'dictionaries/aussie/'

	file = open(dire+'oz.gz', 'wb')
	print "\r\n[+] downloading oz.gz..."
	ftp.retrbinary('RETR ' + 'oz.gz', handleDownload)
	filequitter()

	print '[+] file saved to '+ dire
	ftp.quit()
	exit()


if filedown == "5":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('chinese')
	if os.path.isdir('dictionaries/chinese/') == 0:
		os.mkdir('dictionaries/chinese/')
	dire = 'dictionaries/chinese/'

	file = open(dire+'chinese.gz', 'wb')
	print "\r\n[+] downloading chinese.gz..."
	ftp.retrbinary('RETR ' + 'chinese.gz', handleDownload)
	filequitter()

	print '[+] file saved to '+ dire
	ftp.quit()
	exit()

if filedown == "6":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('computer')
	if os.path.isdir('dictionaries/computer/') == 0:
		os.mkdir('dictionaries/computer/')
	dire = 'dictionaries/computer/'

	file = open(dire+'Domains.gz', 'wb')
	print "\r\n[+] downloading Domains.gz..."
	ftp.retrbinary('RETR ' + 'Domains.gz', handleDownload)
	filequitter()

	file = open(dire+'Dosref.gz', 'wb')
	print "\r\n[+] downloading Dosref.gz..."
	ftp.retrbinary('RETR ' + 'Dosref.gz', handleDownload)
	filequitter()

	file = open(dire+'Ftpsites.gz', 'wb')
	print "\r\n[+] downloading Ftpsites.gz..."
	ftp.retrbinary('RETR ' + 'Ftpsites.gz', handleDownload)
	filequitter()

	file = open(dire+'Jargon.gz', 'wb')
	print "\r\n[+] downloading Jargon.gz..."
	ftp.retrbinary('RETR ' + 'Jargon.gz', handleDownload)
	filequitter()

	file = open(dire+'common-passwords.txt.gz', 'wb')
	print "\r\n[+] downloading common-passwords.txt.gz..."
	ftp.retrbinary('RETR ' + 'common-passwords.txt.gz', handleDownload)
	filequitter()

	file = open(dire+'etc-hosts.gz', 'wb')
	print "\r\n[+] downloading etc-hosts.gz..."
	ftp.retrbinary('RETR ' + 'etc-hosts.gz', handleDownload)
	filequitter()

	file = open(dire+'foldoc.gz', 'wb')
	print "\r\n[+] downloading foldoc.gz..."
	ftp.retrbinary('RETR ' + 'foldoc.gz', handleDownload)
	filequitter()

	file = open(dire+'language-list.gz', 'wb')
	print "\r\n[+] downloading language-list.gz..."
	ftp.retrbinary('RETR ' + 'language-list.gz', handleDownload)
	filequitter()

	file = open(dire+'unix.gz', 'wb')
	print "\r\n[+] downloading unix.gz..."
	ftp.retrbinary('RETR ' + 'unix.gz', handleDownload)
	filequitter()

	print '[+] files saved to '+ dire
	ftp.quit()
	exit()

if filedown == "7":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('croatian')
	if os.path.isdir('dictionaries/croatian/') == 0:
		os.mkdir('dictionaries/croatian/')
	dire = 'dictionaries/croatian/'

	file = open(dire+'croatian.gz', 'wb')
	print "\r\n[+] downloading croatian.gz..."
	ftp.retrbinary('RETR ' + 'croatian.gz', handleDownload)
	filequitter()

	print '[+] file saved to '+ dire
	ftp.quit()
	exit()

if filedown == "8":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('czech')
	if os.path.isdir('dictionaries/czech/') == 0:
		os.mkdir('dictionaries/czech/')
	dire = 'dictionaries/czech/'

	file = open(dire+'czech-wordlist-ascii-cstug-novak.gz', 'wb')
	print "\r\n[+] downloading czech-wordlist-ascii-cstug-novak.gz..."
	ftp.retrbinary('RETR ' + 'czech-wordlist-ascii-cstug-novak.gz', handleDownload)
	filequitter()

	print '[+] file saved to '+ dire
	ftp.quit()
	exit()


if filedown == "9":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('danish')
	if os.path.isdir('dictionaries/danish/') == 0:
		os.mkdir('dictionaries/danish/')
	dire = 'dictionaries/danish/'

	file = open(dire+'danish.words.gz', 'wb')
	print "\r\n[+] downloading danish.words.gz..."
	ftp.retrbinary('RETR ' + 'danish.words.gz', handleDownload)
	filequitter()

	file = open(dire+'dansk.zip', 'wb')
	print "\r\n[+] downloading dansk.zip..."
	ftp.retrbinary('RETR ' + 'dansk.zip', handleDownload)
	filequitter()

	print '[+] files saved to '+ dire
	ftp.quit()
	exit()

if filedown == "10":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('databases')
	if os.path.isdir('dictionaries/databases/') == 0:
		os.mkdir('dictionaries/databases/')
	dire = 'dictionaries/databases/'

	file = open(dire+'acronyms.gz', 'wb')
	print "\r\n[+] downloading acronyms.gz..."
	ftp.retrbinary('RETR ' + 'acronyms.gz', handleDownload)
	filequitter()

	file = open(dire+'att800.gz', 'wb')
	print "\r\n[+] downloading att800.gz..."
	ftp.retrbinary('RETR ' + 'att800.gz', handleDownload)
	filequitter()

	file = open(dire+'computer-companies.gz', 'wb')
	print "\r\n[+] downloading computer-companies.gz..."
	ftp.retrbinary('RETR ' + 'computer-companies.gz', handleDownload)
	filequitter()

	file = open(dire+'world_heritage.gz', 'wb')
	print "\r\n[+] downloading world_heritage.gz..."
	ftp.retrbinary('RETR ' + 'world_heritage.gz', handleDownload)
	filequitter()

	print '[+] files saved to '+ dire
	ftp.quit()
	exit()

if filedown == "11":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('dictionaries')
	if os.path.isdir('dictionaries/dictionaries/') == 0:
		os.mkdir('dictionaries/dictionaries/')
	dire = 'dictionaries/dictionaries/'

	file = open(dire+'Antworth.gz', 'wb')
	print "\r\n[+] downloading Antworth.gz..."
	ftp.retrbinary('RETR ' + 'Antworth.gz', handleDownload)
	filequitter()

	file = open(dire+'CRL.words.gz', 'wb')
	print "\r\n[+] downloading CRL.words.gz..."
	ftp.retrbinary('RETR ' + 'CRL.words.gz', handleDownload)
	filequitter()

	file = open(dire+'Roget.words.gz', 'wb')
	print "\r\n[+] downloading Roget.words.gz..."
	ftp.retrbinary('RETR ' + 'Roget.words.gz', handleDownload)
	filequitter()

	file = open(dire+'Unabr.dict.gz', 'wb')
	print "\r\n[+] downloading Unabr.dict.gz..."
	ftp.retrbinary('RETR ' + 'Unabr.dict.gz', handleDownload)
	filequitter()

	file = open(dire+'Unix.dict.gz', 'wb')
	print "\r\n[+] downloading Unix.dict.gz..."
	ftp.retrbinary('RETR ' + 'Unix.dict.gz', handleDownload)
	filequitter()

	file = open(dire+'englex-dict.gz', 'wb')
	print "\r\n[+] downloading englex-dict.gz..."
	ftp.retrbinary('RETR ' + 'englex-dict.gz', handleDownload)
	filequitter()

	file = open(dire+'knuth_britsh.gz', 'wb')
	print "\r\n[+] downloading knuth_britsh.gz..."
	ftp.retrbinary('RETR ' + 'knuth_britsh.gz', handleDownload)
	filequitter()

	file = open(dire+'knuth_words.gz', 'wb')
	print "\r\n[+] downloading knuth_words.gz..."
	ftp.retrbinary('RETR ' + 'knuth_words.gz', handleDownload)
	filequitter()

	file = open(dire+'pocket-dic.gz', 'wb')
	print "\r\n[+] downloading pocket-dic.gz..."
	ftp.retrbinary('RETR ' + 'pocket-dic.gz', handleDownload)
	filequitter()

	file = open(dire+'shakesp-glossary.gz', 'wb')
	print "\r\n[+] downloading shakesp-glossary.gz..."
	ftp.retrbinary('RETR ' + 'shakesp-glossary.gz', handleDownload)
	filequitter()

	file = open(dire+'special.eng.gz', 'wb')
	print "\r\n[+] downloading special.eng.gz..."
	ftp.retrbinary('RETR ' + 'special.eng.gz', handleDownload)
	filequitter()

	file = open(dire+'words-english.gz', 'wb')
	print "\r\n[+] downloading words-english.gz..."
	ftp.retrbinary('RETR ' + 'words-english.gz', handleDownload)
	filequitter()

	print '[+] files saved to '+ dire
	ftp.quit()
	exit()

if filedown == "12":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('dutch')
	if os.path.isdir('dictionaries/dutch/') == 0:
		os.mkdir('dictionaries/dutch/')
	dire = 'dictionaries/dutch/'

	file = open(dire+'words.dutch.gz', 'wb')
	print "\r\n[+] downloading words.dutch.gz..."
	ftp.retrbinary('RETR ' + 'words.dutch.gz', handleDownload)
	filequitter()

	print '[+] file saved to '+ dire
	ftp.quit()
	exit()

if filedown == "13":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('finnish')
	if os.path.isdir('dictionaries/finnish/') == 0:
		os.mkdir('dictionaries/finnish/')
	dire = 'dictionaries/finnish/'

	file = open(dire+'finnish.gz', 'wb')
	print "\r\n[+] downloading finnish.gz..."
	ftp.retrbinary('RETR ' + 'finnish.gz', handleDownload)
	filequitter()

	file = open(dire+'firstnames.finnish.gz', 'wb')
	print "\r\n[+] downloading firstnames.finnish.gz..."
	ftp.retrbinary('RETR ' + 'firstnames.finnish.gz', handleDownload)
	filequitter()

	file = open(dire+'words.finnish.FAQ.gz', 'wb')
	print "\r\n[+] downloading words.finnish.FAQ.gz..."
	ftp.retrbinary('RETR ' + 'words.finnish.FAQ.gz', handleDownload)
	filequitter()

	print '[+] files saved to '+ dire
	ftp.quit()
	exit()

if filedown == "14":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('french')
	if os.path.isdir('dictionaries/french/') == 0:
		os.mkdir('dictionaries/french/')
	dire = 'dictionaries/french/'

	file = open(dire+'dico.gz', 'wb')
	print "\r\n[+] downloading dico.gz..."
	ftp.retrbinary('RETR ' + 'dico.gz', handleDownload)
	filequitter()

	print '[+] file saved to '+ dire
	ftp.quit()
	exit()

if filedown == "15":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('german')
	if os.path.isdir('dictionaries/german/') == 0:
		os.mkdir('dictionaries/german/')
	dire = 'dictionaries/german/'

	file = open(dire+'deutsch.dic.gz', 'wb')
	print "\r\n[+] downloading deutsch.dic.gz..."
	ftp.retrbinary('RETR ' + 'deutsch.dic.gz', handleDownload)
	filequitter()

	file = open(dire+'germanl.gz', 'wb')
	print "\r\n[+] downloading germanl.gz..."
	ftp.retrbinary('RETR ' + 'germanl.gz', handleDownload)
	filequitter()

	file = open(dire+'words.german.gz', 'wb')
	print "\r\n[+] downloading words.german.gz..."
	ftp.retrbinary('RETR ' + 'words.german.gz', handleDownload)
	filequitter()

	print '[+] files saved to '+ dire
	ftp.quit()
	exit()

if filedown == "16":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('hindi')
	if os.path.isdir('dictionaries/hindi/') == 0:
		os.mkdir('dictionaries/hindi/')
	dire = 'dictionaries/hindi/'

	file = open(dire+'hindu-names.gz', 'wb')
	print "\r\n[+] downloading hindu-names.gz..."
	ftp.retrbinary('RETR ' + 'hindu-names.gz', handleDownload)
	filequitter()

	print '[+] file saved to '+ dire
	ftp.quit()
	exit()

if filedown == "17":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('hungarian')
	if os.path.isdir('dictionaries/hungarian/') == 0:
		os.mkdir('dictionaries/hungarian/')
	dire = 'dictionaries/hungarian/'

	file = open(dire+'hungarian.gz', 'wb')
	print "\r\n[+] downloading hungarian.gz..."
	ftp.retrbinary('RETR ' + 'hungarian.gz', handleDownload)
	filequitter()

	print '[+] file saved to '+ dire
	ftp.quit()
	exit()

if filedown == "18":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('italian')
	if os.path.isdir('dictionaries/italian/') == 0:
		os.mkdir('dictionaries/italian/')
	dire = 'dictionaries/italian/'

	file = open(dire+'words.italian.gz', 'wb')
	print "\r\n[+] downloading words.italian.gz..."
	ftp.retrbinary('RETR ' + 'words.italian.gz', handleDownload)
	filequitter()

	print '[+] file saved to '+ dire
	ftp.quit()
	exit()

if filedown == "19":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('japanese')
	if os.path.isdir('dictionaries/japanese/') == 0:
		os.mkdir('dictionaries/japanese/')
	dire = 'dictionaries/japanese/'

	file = open(dire+'words.japanese.gz', 'wb')
	print "\r\n[+] downloading words.japanese.gz..."
	ftp.retrbinary('RETR ' + 'words.japanese.gz', handleDownload)
	filequitter()

	print '[+] file saved to '+ dire
	ftp.quit()
	exit()

if filedown == "20":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('latin')
	if os.path.isdir('dictionaries/latin/') == 0:
		os.mkdir('dictionaries/latin/')
	dire = 'dictionaries/latin/'

	file = open(dire+'wordlist.aug.gz', 'wb')
	print "\r\n[+] downloading wordlist.aug.gz..."
	ftp.retrbinary('RETR ' + 'wordlist.aug.gz', handleDownload)
	filequitter()

	print '[+] file saved to '+ dire
	ftp.quit()
	exit()

if filedown == "21":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('literature')
	if os.path.isdir('dictionaries/literature/') == 0:
		os.mkdir('dictionaries/literature/')
	dire = 'dictionaries/literature/'

	file = open(dire+'LCarrol.gz', 'wb')
	print "\r\n[+] downloading LCarrol.gz..."
	ftp.retrbinary('RETR ' + 'LCarrol.gz', handleDownload)
	filequitter()

	file = open(dire+'Paradise.Lost.gz', 'wb')
	print "\r\n[+] downloading Paradise.Lost.gz..."
	ftp.retrbinary('RETR ' + 'Paradise.Lost.gz', handleDownload)
	filequitter()

	file = open(dire+'aeneid.gz', 'wb')
	print "\r\n[+] downloading aeneid.gz..."
	ftp.retrbinary('RETR ' + 'aeneid.gz', handleDownload)
	filequitter()

	file = open(dire+'arthur.gz', 'wb')
	print "\r\n[+] downloading arthur.gz..."
	ftp.retrbinary('RETR ' + 'arthur.gz', handleDownload)
	filequitter()

	file = open(dire+'cartoon.gz', 'wb')
	print "\r\n[+] downloading cartoon.gz..."
	ftp.retrbinary('RETR ' + 'cartoon.gz', handleDownload)
	filequitter()

	file = open(dire+'cartoons-olivier.gz', 'wb')
	print "\r\n[+] downloading cartoons-olivier.gz..."
	ftp.retrbinary('RETR ' + 'cartoons-olivier.gz', handleDownload)
	filequitter()

	file = open(dire+'charlemagne.gz', 'wb')
	print "\r\n[+] downloading charlemagne.gz..."
	ftp.retrbinary('RETR ' + 'charlemagne.gz', handleDownload)
	filequitter()

	file = open(dire+'fable.gz', 'wb')
	print "\r\n[+] downloading fable.gz..."
	ftp.retrbinary('RETR ' + 'fable.gz', handleDownload)
	filequitter()

	file = open(dire+'iliad.gz', 'wb')
	print "\r\n[+] downloading iliad.gz..."
	ftp.retrbinary('RETR ' + 'iliad.gz', handleDownload)
	filequitter()

	file = open(dire+'myths-legends.gz', 'wb')
	print "\r\n[+] downloading myths-legends.gz..."
	ftp.retrbinary('RETR ' + 'myths-legends.gz', handleDownload)
	filequitter()

	file = open(dire+'odyssey.gz', 'wb')
	print "\r\n[+] downloading odyssey.gz..."
	ftp.retrbinary('RETR ' + 'odyssey.gz', handleDownload)
	filequitter()

	file = open(dire+'sf.gz', 'wb')
	print "\r\n[+] downloading sf.gz..."
	ftp.retrbinary('RETR ' + 'sf.gz', handleDownload)
	filequitter()

	file = open(dire+'shakespeare.gz', 'wb')
	print "\r\n[+] downloading shakespeare.gz..."
	ftp.retrbinary('RETR ' + 'shakespeare.gz', handleDownload)
	filequitter()

	file = open(dire+'tolkien.words.gz', 'wb')
	print "\r\n[+] downloading tolkien.words.gz..."
	ftp.retrbinary('RETR ' + 'tolkien.words.gz', handleDownload)
	filequitter()

	print '[+] files saved to '+ dire
	ftp.quit()
	exit()

if filedown == "22":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('movieTV')
	if os.path.isdir('dictionaries/movieTV/') == 0:
		os.mkdir('dictionaries/movieTV/')
	dire = 'dictionaries/movieTV/'

	file = open(dire+'Movies.gz', 'wb')
	print "\r\n[+] downloading Movies.gz..."
	ftp.retrbinary('RETR ' + 'Movies.gz', handleDownload)
	filequitter()

	file = open(dire+'Python.gz', 'wb')
	print "\r\n[+] downloading Python.gz..."
	ftp.retrbinary('RETR ' + 'Python.gz', handleDownload)
	filequitter()

	file = open(dire+'Trek.gz', 'wb')
	print "\r\n[+] downloading Trek.gz..."
	ftp.retrbinary('RETR ' + 'Trek.gz', handleDownload)
	filequitter()

	print '[+] files saved to '+ dire
	ftp.quit()
	exit()

if filedown == "23":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('music')
	if os.path.isdir('dictionaries/music/') == 0:
		os.mkdir('dictionaries/music/')
	dire = 'dictionaries/music/'

	file = open(dire+'music-classical.gz', 'wb')
	print "\r\n[+] downloading music-classical.gz..."
	ftp.retrbinary('RETR ' + 'music-classical.gz', handleDownload)
	filequitter()

	file = open(dire+'music-country.gz', 'wb')
	print "\r\n[+] downloading music-country.gz..."
	ftp.retrbinary('RETR ' + 'music-country.gz', handleDownload)
	filequitter()

	file = open(dire+'music-jazz.gz', 'wb')
	print "\r\n[+] downloading music-jazz.gz..."
	ftp.retrbinary('RETR ' + 'music-jazz.gz', handleDownload)
	filequitter()

	file = open(dire+'music-other.gz', 'wb')
	print "\r\n[+] downloading music-other.gz..."
	ftp.retrbinary('RETR ' + 'music-other.gz', handleDownload)
	filequitter()

	file = open(dire+'music-rock.gz', 'wb')
	print "\r\n[+] downloading music-rock.gz..."
	ftp.retrbinary('RETR ' + 'music-rock.gz', handleDownload)
	filequitter()

	file = open(dire+'music-shows.gz', 'wb')
	print "\r\n[+] downloading music-shows.gz..."
	ftp.retrbinary('RETR ' + 'music-shows.gz', handleDownload)
	filequitter()

	file = open(dire+'rock-groups.gz', 'wb')
	print "\r\n[+] downloading rock-groups.gz..."
	ftp.retrbinary('RETR ' + 'rock-groups.gz', handleDownload)
	filequitter()

	print '[+] files saved to '+ dire
	ftp.quit()
	exit()

if filedown == "24":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('names')
	if os.path.isdir('dictionaries/names/') == 0:
		os.mkdir('dictionaries/names/')
	dire = 'dictionaries/names/'

	file = open(dire+'ASSurnames.gz', 'wb')
	print "\r\n[+] downloading ASSurnames.gz..."
	ftp.retrbinary('RETR ' + 'ASSurnames.gz', handleDownload)
	filequitter()

	file = open(dire+'Congress.gz', 'wb')
	print "\r\n[+] downloading Congress.gz..."
	ftp.retrbinary('RETR ' + 'Congress.gz', handleDownload)
	filequitter()

	file = open(dire+'Family-Names.gz', 'wb')
	print "\r\n[+] downloading Family-Names.gz..."
	ftp.retrbinary('RETR ' + 'Family-Names.gz', handleDownload)
	filequitter()

	file = open(dire+'Given-Names.gz', 'wb')
	print "\r\n[+] downloading Given-Names.gz..."
	ftp.retrbinary('RETR ' + 'Given-Names.gz', handleDownload)
	filequitter()

	file = open(dire+'actor-givenname.gz', 'wb')
	print "\r\n[+] downloading actor-givenname.gz..."
	ftp.retrbinary('RETR ' + 'actor-givenname.gz', handleDownload)
	filequitter()

	file = open(dire+'actor-surname.gz', 'wb')
	print "\r\n[+] downloading actor-surname.gz..."
	ftp.retrbinary('RETR ' + 'actor-surname.gz', handleDownload)
	filequitter()

	file = open(dire+'cis-givenname.gz', 'wb')
	print "\r\n[+] downloading cis-givenname.gz..."
	ftp.retrbinary('RETR ' + 'cis-givenname.gz', handleDownload)
	filequitter()

	file = open(dire+'cis-surname.gz', 'wb')
	print "\r\n[+] downloading cis-surname.gz..."
	ftp.retrbinary('RETR ' + 'cis-surname.gz', handleDownload)
	filequitter()

	file = open(dire+'crl-names.gz', 'wb')
	print "\r\n[+] downloading crl-names.gz..."
	ftp.retrbinary('RETR ' + 'crl-names.gz', handleDownload)
	filequitter()

	file = open(dire+'famous.gz', 'wb')
	print "\r\n[+] downloading famous.gz..."
	ftp.retrbinary('RETR ' + 'famous.gz', handleDownload)
	filequitter()

	file = open(dire+'fast-names.gz', 'wb')
	print "\r\n[+] downloading fast-names.gz..."
	ftp.retrbinary('RETR ' + 'fast-names.gz', handleDownload)
	filequitter()

	file = open(dire+'female-names-kantr.gz', 'wb')
	print "\r\n[+] downloading female-names-kantr.gz..."
	ftp.retrbinary('RETR ' + 'female-names-kantr.gz', handleDownload)
	filequitter()

	file = open(dire+'female-names.gz', 'wb')
	print "\r\n[+] downloading female-names.gz..."
	ftp.retrbinary('RETR ' + 'female-names.gz', handleDownload)
	filequitter()

	file = open(dire+'givennames-ol.gz', 'wb')
	print "\r\n[+] downloading givennames-ol.gz..."
	ftp.retrbinary('RETR ' + 'givennames-ol.gz', handleDownload)
	filequitter()

	file = open(dire+'male-names-kantr.gz', 'wb')
	print "\r\n[+] downloading male-names-kantr.gz..."
	ftp.retrbinary('RETR ' + 'male-names-kantr.gz', handleDownload)
	filequitter()

	file = open(dire+'male-names.gz', 'wb')
	print "\r\n[+] downloading male-names.gz..."
	ftp.retrbinary('RETR ' + 'male-names.gz', handleDownload)
	filequitter()

	file = open(dire+'movie-characters.gz', 'wb')
	print "\r\n[+] downloading movie-characters.gz..."
	ftp.retrbinary('RETR ' + 'movie-characters.gz', handleDownload)
	filequitter()

	file = open(dire+'names.french.gz', 'wb')
	print "\r\n[+] downloading names.french.gz..."
	ftp.retrbinary('RETR ' + 'names.french.gz', handleDownload)
	filequitter()

	file = open(dire+'names.hp.gz', 'wb')
	print "\r\n[+] downloading names.hp.gz..."
	ftp.retrbinary('RETR ' + 'names.hp.gz', handleDownload)
	filequitter()

	file = open(dire+'other-names.gz', 'wb')
	print "\r\n[+] downloading other-names.gz..."
	ftp.retrbinary('RETR ' + 'other-names.gz', handleDownload)
	filequitter()

	file = open(dire+'shakesp-names.gz', 'wb')
	print "\r\n[+] downloading shakesp-names.gz..."
	ftp.retrbinary('RETR ' + 'shakesp-names.gz', handleDownload)
	filequitter()

	file = open(dire+'surnames-ol.gz', 'wb')
	print "\r\n[+] downloading surnames-ol.gz..."
	ftp.retrbinary('RETR ' + 'surnames-ol.gz', handleDownload)
	filequitter()

	file = open(dire+'surnames.finnish.gz', 'wb')
	print "\r\n[+] downloading surnames.finnish.gz..."
	ftp.retrbinary('RETR ' + 'surnames.finnish.gz', handleDownload)
	filequitter()

	file = open(dire+'usenet-names.gz', 'wb')
	print "\r\n[+] downloading usenet-names.gz..."
	ftp.retrbinary('RETR ' + 'usenet-names.gz', handleDownload)
	filequitter()

	print '[+] files saved to '+ dire
	ftp.quit()
	exit()


if filedown == "25":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('net')
	if os.path.isdir('dictionaries/net/') == 0:
		os.mkdir('dictionaries/net/')
	dire = 'dictionaries/net/'

	file = open(dire+'hosts-txt.gz', 'wb')
	print "\r\n[+] downloading hosts-txt.gz..."
	ftp.retrbinary('RETR ' + 'hosts-txt.gz', handleDownload)
	filequitter()

	file = open(dire+'inet-machines.gz', 'wb')
	print "\r\n[+] downloading inet-machines.gz..."
	ftp.retrbinary('RETR ' + 'inet-machines.gz', handleDownload)
	filequitter()

	file = open(dire+'usenet-loginids.gz', 'wb')
	print "\r\n[+] downloading usenet-loginids.gz..."
	ftp.retrbinary('RETR ' + 'usenet-loginids.gz', handleDownload)
	filequitter()

	file = open(dire+'usenet-machines.gz', 'wb')
	print "\r\n[+] downloading usenet-machines.gz..."
	ftp.retrbinary('RETR ' + 'usenet-machines.gz', handleDownload)
	filequitter()

	file = open(dire+'uunet-sites.gz', 'wb')
	print "\r\n[+] downloading uunet-sites.gz..."
	ftp.retrbinary('RETR ' + 'uunet-sites.gz', handleDownload)
	filequitter()

	print '[+] files saved to '+ dire
	ftp.quit()
	exit()

if filedown == "26":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('norwegian')
	if os.path.isdir('dictionaries/norwegian/') == 0:
		os.mkdir('dictionaries/norwegian/')
	dire = 'dictionaries/norwegian/'

	file = open(dire+'words.norwegian.gz', 'wb')
	print "\r\n[+] downloading words.norwegian.gz..."
	ftp.retrbinary('RETR ' + 'words.norwegian.gz', handleDownload)
	filequitter()

	print '[+] file saved to '+ dire
	ftp.quit()
	exit()

if filedown == "27":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('places')
	if os.path.isdir('dictionaries/places/') == 0:
		os.mkdir('dictionaries/places/')
	dire = 'dictionaries/places/'

	file = open(dire+'Colleges.gz', 'wb')
	print "\r\n[+] downloading Colleges.gz..."
	ftp.retrbinary('RETR ' + 'Colleges.gz', handleDownload)
	filequitter()

	file = open(dire+'US-counties.gz', 'wb')
	print "\r\n[+] downloading US-counties.gz..."
	ftp.retrbinary('RETR ' + 'US-counties.gz', handleDownload)
	filequitter()

	file = open(dire+'World.factbook.gz', 'wb')
	print "\r\n[+] downloading World.factbook.gz..."
	ftp.retrbinary('RETR ' + 'World.factbook.gz', handleDownload)
	filequitter()

	file = open(dire+'Zipcodes.gz', 'wb')
	print "\r\n[+] downloading Zipcodes.gz..."
	ftp.retrbinary('RETR ' + 'Zipcodes.gz', handleDownload)
	filequitter()

	file = open(dire+'places.gz', 'wb')
	print "\r\n[+] downloading places.gz..."
	ftp.retrbinary('RETR ' + 'places.gz', handleDownload)
	filequitter()

	print '[+] files saved to '+ dire
	ftp.quit()
	exit()

if filedown == "28":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('polish')
	if os.path.isdir('dictionaries/polish/') == 0:
		os.mkdir('dictionaries/polish/')
	dire = 'dictionaries/polish/'

	file = open(dire+'words.polish.gz', 'wb')
	print "\r\n[+] downloading words.polish.gz..."
	ftp.retrbinary('RETR ' + 'words.polish.gz', handleDownload)
	filequitter()

	print '[+] file saved to '+ dire
	ftp.quit()
	exit()

if filedown == "29":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('random')
	if os.path.isdir('dictionaries/random/') == 0:
		os.mkdir('dictionaries/random/')
	dire = 'dictionaries/random/'

	file = open(dire+'Ethnologue.gz', 'wb')
	print "\r\n[+] downloading Ethnologue.gz..."
	ftp.retrbinary('RETR ' + 'Ethnologue.gz', handleDownload)
	filequitter()

	file = open(dire+'abbr.gz', 'wb')
	print "\r\n[+] downloading abbr.gz..."
	ftp.retrbinary('RETR ' + 'abbr.gz', handleDownload)
	filequitter()

	file = open(dire+'chars.gz', 'wb')
	print "\r\n[+] downloading chars.gz..."
	ftp.retrbinary('RETR ' + 'chars.gz', handleDownload)
	filequitter()

	file = open(dire+'dogs.gz', 'wb')
	print "\r\n[+] downloading dogs.gz..."
	ftp.retrbinary('RETR ' + 'dogs.gz', handleDownload)
	filequitter()

	file = open(dire+'drugs.gz', 'wb')
	print "\r\n[+] downloading drugs.gz..."
	ftp.retrbinary('RETR ' + 'drugs.gz', handleDownload)
	filequitter()

	file = open(dire+'junk.gz', 'wb')
	print "\r\n[+] downloading junk.gz..."
	ftp.retrbinary('RETR ' + 'junk.gz', handleDownload)
	filequitter()

	file = open(dire+'numbers.gz', 'wb')
	print "\r\n[+] downloading numbers.gz..."
	ftp.retrbinary('RETR ' + 'numbers.gz', handleDownload)
	filequitter()

	file = open(dire+'phrases.gz', 'wb')
	print "\r\n[+] downloading phrases.gz..."
	ftp.retrbinary('RETR ' + 'phrases.gz', handleDownload)
	filequitter()

	file = open(dire+'sports.gz', 'wb')
	print "\r\n[+] downloading sports.gz..."
	ftp.retrbinary('RETR ' + 'sports.gz', handleDownload)
	filequitter()

	file = open(dire+'statistics.gz', 'wb')
	print "\r\n[+] downloading statistics.gz..."
	ftp.retrbinary('RETR ' + 'statistics.gz', handleDownload)
	filequitter()

	print '[+] files saved to '+ dire
	ftp.quit()
	exit()

if filedown == "30":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('religion')
	if os.path.isdir('dictionaries/religion/') == 0:
		os.mkdir('dictionaries/religion/')
	dire = 'dictionaries/religion/'

	file = open(dire+'Koran.gz', 'wb')
	print "\r\n[+] downloading Koran.gz..."
	ftp.retrbinary('RETR ' + 'Koran.gz', handleDownload)
	filequitter()

	file = open(dire+'kjbible.gz', 'wb')
	print "\r\n[+] downloading kjbible.gz..."
	ftp.retrbinary('RETR ' + 'kjbible.gz', handleDownload)
	filequitter()

	file = open(dire+'norse.gz', 'wb')
	print "\r\n[+] downloading norse.gz..."
	ftp.retrbinary('RETR ' + 'norse.gz', handleDownload)
	filequitter()

	print '[+] files saved to '+ dire
	ftp.quit()
	exit()

if filedown == "31":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('russian')
	if os.path.isdir('dictionaries/russian/') == 0:
		os.mkdir('dictionaries/russian/')
	dire = 'dictionaries/russian/'

	file = open(dire+'russian.lst.gz', 'wb')
	print "\r\n[+] downloading russian.lst.gz..."
	ftp.retrbinary('RETR ' + 'russian.lst.gz', handleDownload)
	filequitter()

	file = open(dire+'russian_words.koi8.gz', 'wb')
	print "\r\n[+] downloading russian_words.koi8.gz..."
	ftp.retrbinary('RETR ' + 'russian_words.koi8.gz', handleDownload)
	filequitter()

	print '[+] files saved to '+ dire
	ftp.quit()
	exit()

if filedown == "32":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('science')
	if os.path.isdir('dictionaries/science/') == 0:
		os.mkdir('dictionaries/science/')
	dire = 'dictionaries/science/'

	file = open(dire+'Acr-diagnosis.gz', 'wb')
	print "\r\n[+] downloading Acr-diagnosis.gz..."
	ftp.retrbinary('RETR ' + 'Acr-diagnosis.gz', handleDownload)
	filequitter()

	file = open(dire+'Algae.gz', 'wb')
	print "\r\n[+] downloading Algae.gz..."
	ftp.retrbinary('RETR ' + 'Algae.gz', handleDownload)
	filequitter()

	file = open(dire+'Bacteria.gz', 'wb')
	print "\r\n[+] downloading Bacteria.gz..."
	ftp.retrbinary('RETR ' + 'Bacteria.gz', handleDownload)
	filequitter()

	file = open(dire+'Fungi.gz', 'wb')
	print "\r\n[+] downloading Fungi.gz..."
	ftp.retrbinary('RETR ' + 'Fungi.gz', handleDownload)
	filequitter()

	file = open(dire+'Microalgae.gz', 'wb')
	print "\r\n[+] downloading Microalgae.gz..."
	ftp.retrbinary('RETR ' + 'Microalgae.gz', handleDownload)
	filequitter()

	file = open(dire+'Viruses.gz', 'wb')
	print "\r\n[+] downloading Viruses.gz..."
	ftp.retrbinary('RETR ' + 'Viruses.gz', handleDownload)
	filequitter()

	file = open(dire+'asteroids.gz', 'wb')
	print "\r\n[+] downloading asteroids.gz..."
	ftp.retrbinary('RETR ' + 'asteroids.gz', handleDownload)
	filequitter()

	file = open(dire+'biology.gz', 'wb')
	print "\r\n[+] downloading biology.gz..."
	ftp.retrbinary('RETR ' + 'biology.gz', handleDownload)
	filequitter()

	file = open(dire+'tech.gz', 'wb')
	print "\r\n[+] downloading tech.gz..."
	ftp.retrbinary('RETR ' + 'tech.gz', handleDownload)
	filequitter()

	print '[+] files saved to '+ dire
	ftp.quit()
	exit()

if filedown == "33":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('spanish')
	if os.path.isdir('dictionaries/spanish/') == 0:
		os.mkdir('dictionaries/spanish/')
	dire = 'dictionaries/spanish/'

	file = open(dire+'words.spanish.gz', 'wb')
	print "\r\n[+] downloading words.spanish.gz..."
	ftp.retrbinary('RETR ' + 'words.spanish.gz', handleDownload)
	filequitter()

	print '[+] file saved to '+ dire
	ftp.quit()
	exit()

if filedown == "34":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('swahili')
	if os.path.isdir('dictionaries/swahili/') == 0:
		os.mkdir('dictionaries/swahili/')
	dire = 'dictionaries/swahili/'

	file = open(dire+'swahili.gz', 'wb')
	print "\r\n[+] downloading swahili.gz..."
	ftp.retrbinary('RETR ' + 'swahili.gz', handleDownload)
	filequitter()

	print '[+] file saved to '+ dire
	ftp.quit()
	exit()

if filedown == "35":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('swedish')
	if os.path.isdir('dictionaries/swedish/') == 0:
		os.mkdir('dictionaries/swedish/')
	dire = 'dictionaries/swedish/'

	file = open(dire+'words.swedish.gz', 'wb')
	print "\r\n[+] downloading words.swedish.gz..."
	ftp.retrbinary('RETR ' + 'words.swedish.gz', handleDownload)
	filequitter()

	print '[+] file saved to '+ dire
	ftp.quit()
	exit()

if filedown == "36":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('turkish')
	if os.path.isdir('dictionaries/turkish/') == 0:
		os.mkdir('dictionaries/turkish/')
	dire = 'dictionaries/turkish/'

	file = open(dire+'turkish.dict.gz', 'wb')
	print "\r\n[+] downloading turkish.dict.gz..."
	ftp.retrbinary('RETR ' + 'turkish.dict.gz', handleDownload)
	filequitter()

	print '[+] file saved to '+ dire
	ftp.quit()
	exit()

if filedown == "37":
	print "[+] connecting..."
	ftp = ftplib.FTP(ftpurl)
	downloader()
	ftp.cwd('yiddish')
	if os.path.isdir('dictionaries/yiddish/') == 0:
		os.mkdir('dictionaries/yiddish/')
	dire = 'dictionaries/yiddish/'

	file = open(dire+'yiddish.gz', 'wb')
	print "\r\n[+] downloading yiddish.gz..."
	ftp.retrbinary('RETR ' + 'yiddish.gz', handleDownload)
	filequitter()

	print '[+] file saved to '+ dire
	ftp.quit()
	exit()



else:
	print '[-] leaving.'
	exit()

else:
print "\r\n[Usage]: "+sys.argv[0] +" [OPTIONS] \r\n"
print "[Help]: "+sys.argv[0] +" -h\r\n"
exit()`

ConfigParser error or cupp.py? idk

Traceback (most recent call last):
File "/root/Desktop/cupp/cupp.py", line 50, in
years = config.get('years', 'years').split(',')
File "/usr/lib/python2.7/ConfigParser.py", line 570, in get
raise NoSectionError(section)
ConfigParser.NoSectionError: No section: 'years'

permission denied error

hi,

ı run with one parameter (-i) and answered questions... but the end seeing is this error please help me !

[+] Now making a dictionary...
[+] Sorting list and removing duplicates...
Traceback (most recent call last):
File "cupp.py", line 1078, in
main()
File "cupp.py", line 1022, in main
interactive()
File "cupp.py", line 356, in interactive
generate_wordlist_from_profile(profile) # generate the wordlist
File "cupp.py", line 691, in generate_wordlist_from_profile
print_to_file(profile["name"] + ".txt", unique_list_finished)
File "cupp.py", line 120, in print_to_file
f = open(filename, "w")
PermissionError: [Errno 13] Permission denied: '****.txt'

thanxx!!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.