-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreate.py
More file actions
172 lines (137 loc) · 5.37 KB
/
create.py
File metadata and controls
172 lines (137 loc) · 5.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#!/usr/bin/env python3
# Create bulk files
"""
Usage:
python3 create.py [options]
[options]: python3 create.py --help
./create.py --help
"""
import os
import random
import string
import argparse
extensionList = (".aif", ".cda", "mp3",".wav",".7z",".rar",".rpm",".tar.gz",".zip",".iso",".csv",".sql",".xml",".log",".db",".cgi",".bat",".bin",".py",".c",".go",".jar",".exe",".ttf",".otf",".bmp",".jpeg",".jpg",".png",".ps",".svg",".gif",".ico",".php",".js",".css",".html",".pptx",".cpp",".h",".sh",".xlsx",".bak",".cfg",".dll",".mp4",".mkv",".mpeg",".docx",".txt",".pdf")
# Possible Patterns
lowerLetters = string.ascii_lowercase
upperLetters = string.ascii_uppercase
integers = string.digits
allCharacters = lowerLetters + upperLetters + integers
# Choose a pattern for filename
def determineCharset(option):
if option == "lower":
return lowerLetters
elif option == "upper":
return upperLetters
elif option == "number":
return integers
return allCharacters
# Generate a filename
def generateFilename():
global ext
for i in range(number):
name = "".join(random.choices(charset,k=namesize))
if args.randomextension:
ext = random.choice(extensionList)
while os.path.isfile(name+ext):
print(f"[-] '{name+ext}' exists.")
name = "".join(random.choices(charset,k=namesize))
yield (name)
# Create the files
def create():
for filename in fileList:
aFile = prefix + filename.strip() + suffix + ext
fileWithPath = os.path.join(dPATH, aFile)
f = open(fileWithPath, "w")
if args.garbage:
garbageData = customgarbage or "".join(random.choices(allCharacters, k=garbageLength))
f.write(garbageData)
f.write(copyData)
f.close()
# Verbose info
if args.verbose:
print(f"[+] '{aFile}' created")
# Command-line arguments
parser = argparse.ArgumentParser()
exclude = parser.add_mutually_exclusive_group()
parser.add_argument("-n", "--number", type=int,help="Number of files to create (Default: 10)")
parser.add_argument("-e", "--extension", type=str, help="Extension of file (Default: txt)")
parser.add_argument("-r", "--randomextension", help="Use random extensions (Default: Off)", action="store_true")
parser.add_argument("-l", "--length", type=int, help="Length of the filename (Default: 11)")
exclude.add_argument("-w", "--wordlist", type=str, help="Get filename with EXTENSION from a file. (One name per line)[Doesn't work with --pattern]")
exclude.add_argument("-p", "--pattern", type=str, help="Name pattern [Possible values: lower, upper, number, mix] (Defaut: mix)")
parser.add_argument("--prefix", type=str, help="Prefix for the filename")
parser.add_argument("--suffix", type=str, help="Suffix for the filename")
parser.add_argument("-v", "--verbose", help="Verbose (Default: Off)", action="store_true")
parser.add_argument("-g", "--garbage", help="Write random garbage data (Default: Off)", action="store_true")
parser.add_argument("--garbagelength", type=int, help="No. of garbage characters to write (Default: 100)")
parser.add_argument("--customgarbage", type=str, help="Write your own data in the created files.(Use with '-g')")
parser.add_argument("-P", "--path", type=str, help="directory to create files. (Default: '.' current directory)")
parser.add_argument("-c", "--copyfrom", type=str, help="File to copy data from.")
args = parser.parse_args()
# Set the required parameters
# Number of files to create
number = 10
if args.number:
if args.number > 0:
number = args.number
else:
print("Number should be greater than 0.")
exit(-1)
# Extension of the files
if args.extension:
ext = f".{args.extension}"
else:
ext = ".txt"
# Charset to use
charset = determineCharset(args.pattern)
# length of filename (without ext)
namesize = 11
if args.length:
if args.length > 0:
namesize = args.length
else:
print("Length of file name should be greater than 0.")
exit(-1)
# wordlist with filenames
wordlist = args.wordlist
# User-provided data to write
customgarbage = args.customgarbage
# Copy data from file
copyData = ''
if args.copyfrom and os.path.isfile(args.copyfrom):
with open(args.copyfrom) as f:
copyData = f.read()
# Directory to create files in
if args.path:
# If the directory exists choose that path, else choose the current working directory
dPATH = os.path.isdir(args.path) and args.path
else:
dPATH = os.getcwd()
# If wordlist is given, use that wordlist instead of default generator
if wordlist and os.path.isfile(wordlist):
with open(wordlist) as f:
fileList = f.readlines()[:number]
ext = ""
else:
fileList = generateFilename()
# length of garbage data to write
garbageLength = 100
if args.garbage and args.garbagelength:
if args.garbagelength > 0:
garbageLength = args.garbagelength
else:
print("Length of data to write should be greater than 0. (--garbagelength)")
exit(-1)
# Prefix and Suffix
prefix = args.prefix or ""
suffix = args.suffix or ""
if args.verbose:
print(f"Number of files to create: {number}")
print(f"Extension: {ext}")
print(f"Length of filename: {namesize}")
print(f"Charset: {charset}")
print(f"Wordlist: {wordlist}")
print(f"Path to create files in : {dPATH}")
# Start creating
if __name__ == "__main__":
create()