From 001a8d970fd4ef46fa4736efd0878ee9d74e349f Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 24 Jan 2016 12:48:39 -0800 Subject: [PATCH] else --- DeLetterbox/README.md | 4 + DeLetterbox/deletterbox.py | 42 ++ DeLetterbox/example1_after.jpg | Bin 0 -> 37713 bytes DeLetterbox/example1_before.jpg | Bin 0 -> 75084 bytes DeLetterbox/example2_after.jpg | Bin 0 -> 25053 bytes DeLetterbox/example2_before.jpg | Bin 0 -> 28893 bytes OpenDirDL/README.md | 6 + OpenDirDL/opendirdl.py | 781 +++++++++++++++++++++++-------- OpenDirDL/ratelimiter.py | 56 +++ Steganographic/steganographic.py | 26 +- 10 files changed, 716 insertions(+), 199 deletions(-) create mode 100644 DeLetterbox/README.md create mode 100644 DeLetterbox/deletterbox.py create mode 100644 DeLetterbox/example1_after.jpg create mode 100644 DeLetterbox/example1_before.jpg create mode 100644 DeLetterbox/example2_after.jpg create mode 100644 DeLetterbox/example2_before.jpg create mode 100644 OpenDirDL/README.md create mode 100644 OpenDirDL/ratelimiter.py diff --git a/DeLetterbox/README.md b/DeLetterbox/README.md new file mode 100644 index 0000000..ffa7ff9 --- /dev/null +++ b/DeLetterbox/README.md @@ -0,0 +1,4 @@ +DeLetterbox +=========== + +I didn't test this very much, just needed something quick. \ No newline at end of file diff --git a/DeLetterbox/deletterbox.py b/DeLetterbox/deletterbox.py new file mode 100644 index 0000000..64a79b2 --- /dev/null +++ b/DeLetterbox/deletterbox.py @@ -0,0 +1,42 @@ +from PIL import Image +import os +import sys + +CLOSE_ENOUGH_THRESHOLD = 10 + +def close_enough(a, b): + for (a_channel, b_channel) in zip(a, b): + if abs(a_channel - b_channel) > CLOSE_ENOUGH_THRESHOLD: + return False + return True + +def deletterbox(filename): + image = Image.open(filename) + trim_top(image) + for x in range(4): + image = trim_top(image) + image = image.rotate(90) + (base, ext) = os.path.splitext(filename) + #filename = base + 'X' + ext + image.save(filename) + +def trim_top(image): + letterbox_color = image.getpixel((0, 0)) + for y in range(image.size[1]): + solid = True + for x in range(image.size[0]): + pixel = image.getpixel((x, y)) + if not close_enough(letterbox_color, pixel): + solid = False + break + if not solid: + break + bounds = (0, y, image.size[0], image.size[1]) + #print(bounds) + image = image.crop(bounds) + return image + +filenames = sys.argv[1:] +for filename in filenames: + deletterbox(filename) + diff --git a/DeLetterbox/example1_after.jpg b/DeLetterbox/example1_after.jpg new file mode 100644 index 0000000000000000000000000000000000000000..77f00f9d3f7e48642aedbf58734d407102c4cc1e GIT binary patch literal 37713 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 literal 0 HcmV?d00001 diff --git a/DeLetterbox/example1_before.jpg b/DeLetterbox/example1_before.jpg new file mode 100644 index 0000000000000000000000000000000000000000..58819e848188170e8629c681a22dd778271b168c GIT binary patch literal 75084 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 literal 0 HcmV?d00001 diff --git a/DeLetterbox/example2_after.jpg b/DeLetterbox/example2_after.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9cf76c6e39bcc1ed331b0846f7a06aabf8239489 GIT binary patch literal 25053 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 literal 0 HcmV?d00001 diff --git a/DeLetterbox/example2_before.jpg b/DeLetterbox/example2_before.jpg new file mode 100644 index 0000000000000000000000000000000000000000..99aa16506aff174b6d537009bfe54ec01f8ae353 GIT binary patch literal 28893 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 literal 0 HcmV?d00001 diff --git a/OpenDirDL/README.md b/OpenDirDL/README.md new file mode 100644 index 0000000..2cfffd0 --- /dev/null +++ b/OpenDirDL/README.md @@ -0,0 +1,6 @@ +Open Dir DL +=========== + +Requires `pip install beautifulsoup4` + +See inside opendirdl.py for usage instructions. \ No newline at end of file diff --git a/OpenDirDL/opendirdl.py b/OpenDirDL/opendirdl.py index 9bff4be..8512076 100644 --- a/OpenDirDL/opendirdl.py +++ b/OpenDirDL/opendirdl.py @@ -1,17 +1,85 @@ -import bs4 -import hashlib -import json +''' +OpenDirDL +downloads open directories + +Usage: + +DIGEST: + Recursively fetch directories and build a database of file URLs. + + > opendirdl digest !clipboard + > opendirdl digest http://website.com/directory/ + + flags: + -f | --fullscan : When included, perform HEAD requests on all files, to + know the size of the entire directory. + -dv "x.db" | --databasename "x.db" : Use a custom database filename. By default, databases + are named after the web domain. + + +DOWNLOAD: + Download the files whose URLs are enabled in the database. + + > opendirdl download website.com.db + + flags: + -o "x" | --outputdir "x" : Save the files to a custom directory, "x". By default, + files are saved to a folder named after the web domain. + -ow | --overwrite : When included, download and overwrite files even if they + already exist in the output directory. + -bps 100 | --bytespersecond 100 : Ratelimit yourself to downloading at 100 BYTES per second. + The webmaster will appreciate this. + +KEEP_PATTERN: + Enable URLs which match a regex pattern. Matches are based on the percent-encoded strings! + + > opendirdl keep_pattern website.com.db ".*" + +REMOVE_PATTERN: + Disable URLs which match a regex pattern. Matches are based on the percent-encoded strings! + + > opendirdl remove_pattern website.com.db ".*" + +LIST_BASENAMES: + List enabled URLs in order of their base filename. This makes it easier to find titles of + interest in a directory that is very scattered or poorly organized. + + > opendirdl list_basenames website.com.db + + flags: + -o "x.txt" | --outputfile "x.txt" : Output the results to a file instead of stdout. This is + useful if the filenames contain special characters that + crash Python, or are so long that the console becomes + unreadable. + +MEASURE: + Sum up the filesizes of all enabled URLs. + + > opendirdl measure website.com.db + + flags: + -f | --fullscan : When included, perform HEAD requests on any URL whose size is not known. + If this flag is not included, and some file's size is unkown, you will + receive a note. +''' + +# Module names preceeded by two hashes indicate modules that are imported during +# a function, because they are not used anywhere else and we don't need to waste +# time importing them usually. + +import argparse +## import bs4 +## import hashlib import os -import re +import ratelimiter +## import re import requests -import string -import sys -import time -import traceback +import sqlite3 +## import sys +## tkinter import urllib.parse FILENAME_BADCHARS = '/\\:*?"<>|' -DOWNLOAD_CHUNK = 2048 # When doing a basic scan, we will not send HEAD requests to URLs that end in these strings, # because they're probably files. @@ -23,197 +91,343 @@ SKIPPABLE_FILETYPES = [ '.epub', '.db', '.flac', +'.gif', +'.gz' '.ico', '.iso', +'.jpeg', '.jpg', +'.m3u', '.m4a', '.mkv', '.mov', '.mp3', '.mp4', +'.nfo', +'.ogg', '.pdf', '.png', '.srt', +'.tar', '.txt', '.webm', '.zip', ] +SKIPPABLE_FILETYPES = set(x.lower() for x in SKIPPABLE_FILETYPES) -SKIPPABLE_FILETYPES = [x.lower() for x in SKIPPABLE_FILETYPES] +BYTE = 1 +KIBIBYTE = 1024 * BYTE +MIBIBYTE = 1024 * KIBIBYTE +GIBIBYTE = 1024 * MIBIBYTE +TEBIBYTE = 1024 * GIBIBYTE +SIZE_UNITS = (TEBIBYTE, GIBIBYTE, MIBIBYTE, KIBIBYTE, BYTE) +UNIT_STRINGS = { + BYTE: 'b', + KIBIBYTE: 'KiB', + MIBIBYTE: 'MiB', + GIBIBYTE: 'GiB', + TEBIBYTE: 'TiB', +} + +DOWNLOAD_CHUNK = 2 * KIBIBYTE + + +DB_INIT = ''' +CREATE TABLE IF NOT EXISTS urls( + url TEXT, + basename TEXT, + content_length INT, + content_type TEXT, + do_download INT + ); +CREATE INDEX IF NOT EXISTS urlindex on urls(url); +CREATE INDEX IF NOT EXISTS baseindex on urls(basename); +CREATE INDEX IF NOT EXISTS sizeindex on urls(content_length); +'''.strip() +SQL_URL = 0 +SQL_BASENAME = 1 +SQL_CONTENT_LENGTH = 2 +SQL_CONTENT_TYPE = 3 +SQL_DO_DOWNLOAD = 4 + + +## DOWNLOADER ###################################################################################### +## ## class Downloader: - def __init__(self, urlfile, outputdir=None, headers=None): - jdict = file_to_dict(urlfile) - self.urls = [item[0] for item in jdict.items()] - self.urls.sort(key=str.lower) + def __init__(self, databasename, outputdir=None, headers=None): + self.databasename = databasename + self.sql = sqlite3.connect(databasename) + self.cur = self.sql.cursor() + + if outputdir is None or outputdir == "": + # This assumes that all URLs in the database are from the same domain. + # If they aren't, it's the user's fault. + self.cur.execute('SELECT url FROM urls LIMIT 1') + url = self.cur.fetchone()[0] + # returns (root, path, filename). Keep root. + outputdir = url_to_filepath(url)[0] self.outputdir = outputdir - if self.outputdir is None or self.outputdir == "": - # returns (root, path, filename). Keep root. - self.outputdir = url_to_filepath(self.urls[0])[0] - - def download(self, overwrite=False): + def download(self, overwrite=False, bytespersecond=None): overwrite = bool(overwrite) - for url in self.urls: + + self.cur.execute('SELECT * FROM urls WHERE do_download == 1 ORDER BY url') + while True: + fetch = self.cur.fetchone() + if fetch is None: + break + url = fetch[SQL_URL] + ''' Creating the Path ''' - (root, folder, filename) = url_to_filepath(url) - # In case the user has set a custom download directory, - # ignore the above value of `root`. + (root, folder, basename) = url_to_filepath(url) + # Ignore this value of `root`, because we might have a custom outputdir. root = self.outputdir folder = os.path.join(root, folder) if not os.path.exists(folder): os.makedirs(folder) - localname = os.path.join(folder, filename) + fullname = os.path.join(folder, basename) temporary_basename = hashit(url, 16) + '.oddltemporary' - temporary_localname = os.path.join(folder, temporary_basename) + temporary_fullname = os.path.join(folder, temporary_basename) ''' Managing overwrite ''' - if os.path.isfile(localname): + if os.path.isfile(fullname): if overwrite is True: - os.remove(localname) + os.remove(fullname) else: - safeprint('Skipping "%s". Use `overwrite=True`' % localname) + safeprint('Skipping "%s". Use `--overwrite`' % fullname) continue - safeprint('Downloading "%s" as "%s"' % (localname, temporary_basename)) - filehandle = open(temporary_localname, 'wb') + safeprint('Downloading "%s" as "%s"' % (fullname, temporary_basename)) + filehandle = open(temporary_fullname, 'wb') try: - download_file(url, filehandle, hookfunction=hook1) - os.rename(temporary_localname, localname) + download_file(url, filehandle, hookfunction=hook1, bytespersecond=bytespersecond) + os.rename(temporary_fullname, fullname) except: filehandle.close() raise +## ## +## DOWNLOADER ###################################################################################### + +## GENERIC ######################################################################################### +## ## +class Generic: + def __init__(self, **kwargs): + for kwarg in kwargs: + setattr(self, kwarg, kwargs[kwarg]) +## ## +## GENERIC ######################################################################################### + + +## WALKER ########################################################################################## +## ## class Walker: - def __init__(self, website, outputfile, fullscan=False): - self.website = website + def __init__(self, walkurl, databasename=None, fullscan=False): + if walkurl[-1] != '/': + walkurl += '/' + self.walkurl = walkurl + if databasename is None: + self.domain = url_to_filepath(walkurl)[0] + databasename = self.domain + '.db' + self.databasename = databasename + + self.sql = sqlite3.connect(self.databasename) + self.cur = self.sql.cursor() + db_init(self.sql, self.cur) + self.fullscan = bool(fullscan) - if os.path.exists(outputfile): - self.results = file_to_dict(outputfile) - else: - self.results = {} - self.already_seen = set() + self.queue = [] + self.seen_directories = set() - def add_head_to_results(self, head): - if isinstance(head, str): - # For when we're doing a basic scan, which skips urls that - # look like a file. - self.results[head] = { - 'Content-Length': -1, - 'Content-Type': '?', - } - self.already_seen.add(head) - else: - # For when we're doing a full scan, which does a HEAD request - # for all urls. - self.results[head.url] = { - 'Content-Length': int(head.headers.get('Content-Length', -1)), - 'Content-Type': head.headers.get('Content-Type', '?'), - } - self.already_seen.add(head.url) + def smart_insert(self, url=None, head=None, commit=True): + ''' + See `smart_insert`. + ''' + smart_insert(self.sql, self.cur, url=url, head=head, commit=commit) - def extract_hrefs(self, response): + def extract_hrefs(self, response, tag='a', attribute='href'): + ''' + Given a Response object, extract href urls. + External links, index sort links, and desktop.ini are discarded. + ''' + import bs4 soup = bs4.BeautifulSoup(response.text) - elements = soup.findAll('a') - hrefs = [] + elements = soup.findAll(tag) for element in elements: try: - href = element['href'] + href = element[attribute] except KeyError: continue href = urllib.parse.urljoin(response.url, href) - if not href.startswith(self.website): - # Don't go to other sites or parent directories + if not href.startswith(self.walkurl): + # Don't go to other sites or parent directories. continue if 'C=' in href and 'O=' in href: - # Alternative sort modes for index pages + # Alternative sort modes for index pages. continue if href.endswith('desktop.ini'): - # I hate these things + # I hate these things. continue - hrefs.append(href) - return hrefs + yield href - def walk(self, url=None): + def process_url(self, url=None): + ''' + Given a URL, check whether it is an index page or an actual file. + If it is an index page, it's links are extracted and queued. + If it is a file, its information is saved to the database. + + We perform a + HEAD: + when `self.fullscan` is True. + when `self.fullscan` is False but the url is not a SKIPPABLE_FILETYPE. + when the url is an index page. + GET: + when the url is a index page. + ''' if url is None: - url = self.website + url = self.walkurl else: - url = urllib.parse.urljoin(self.website, url) + url = urllib.parse.urljoin(self.walkurl, url) - results = [] + if not url.startswith(self.walkurl): + # Don't follow external links or parent directory. + print('Skipping "%s" due to external url.' % url) + return urll = url.lower() - if self.fullscan is False and any(urll.endswith(ext) for ext in SKIPPABLE_FILETYPES): - print('Skipping "%s" due to extension' % url) - self.add_head_to_results(url) - return results + if self.fullscan is False: + skippable = any(urll.endswith(ext) for ext in SKIPPABLE_FILETYPES) + if skippable: + safeprint('Skipping "%s" due to extension.' % url) + self.smart_insert(url=url) + return + self.cur.execute('SELECT * FROM urls WHERE url == ?', [url]) + skippable = self.cur.fetchone() is not None + if skippable: + safeprint('Skipping "%s" since we already have it.' % url) + return - if not url.startswith(self.website): - # Don't follow external links or parent directory. - return results - - head = requests.head(url) - head.raise_for_status() - - safeprint('HEAD: %s : %s' % (url, head)) + try: + head = do_head(url) + except requests.exceptions.HTTPError as e: + if e.response.status_code == 403: + print('403 FORBIDDEN!') + return + if e.response.status_code == 404: + print('404 NOT FOUND!') + return + raise content_type = head.headers.get('Content-Type', '?') - self.already_seen.add(head.url) if content_type.startswith('text/html') and head.url.endswith('/'): - # This is an index page, let's get recursive. - page = requests.get(url) - safeprint(' GET: %s : %s' % (url, page)) - hrefs = self.extract_hrefs(page) - for url in hrefs: - if url not in self.results and url not in self.already_seen: - results += self.walk(url) + # This is an index page, so extract links and queue them. + response = do_get(url) + hrefs = self.extract_hrefs(response) + self.seen_directories.add(head.url) + added = 0 + for href in hrefs: + if href in self.seen_directories: + continue + else: + self.queue.append(href) + added += 1 + print('Queued %d urls' % added) else: - # Don't add index pages to the results. - self.add_head_to_results(head) + # This is not an index page, so save it. + self.smart_insert(head=head) - return results + def walk(self, url=None): + self.queue.append(url) + while len(self.queue) > 0: + url = self.queue.pop(0) + self.process_url(url) +## ## +## WALKER ########################################################################################## +## GENERAL FUNCTIONS ############################################################################### +## ## +def bytes_to_unit_string(bytes): + size_unit = 1 + for unit in SIZE_UNITS: + if bytes >= unit: + size_unit = unit + break + size_unit_string = UNIT_STRINGS[size_unit] + size_string = '%.3f %s' % ((bytes / size_unit), size_unit_string) + return size_string + +def db_init(sql, cur): + lines = DB_INIT.split(';') + for line in lines: + cur.execute(line) + sql.commit() + return True + def dict_to_file(jdict, filename): - filehandle = open(filename, 'wb') - text = json.dumps(jdict, indent=4, sort_keys=True) + text = dict_to_string(jdict) text = text.encode('utf-8') + filehandle = open(filename, 'wb') filehandle.write(text) filehandle.close() -def download_file(url, filehandle, getsizeheaders=True, hookfunction=None, headers={}, auth=None): - if getsizeheaders: - totalsize = requests.head(url, headers=headers, auth=auth) - totalsize = int(totalsize.headers['content-length']) +def do_get(url): + return do_request('GET', requests.get, url) + +def do_head(url): + return do_request('HEAD', requests.head, url) + +def do_request(message, method, url): + import sys + message = '{message:>4s}: {url} : '.format(message=message, url=url) + safeprint(message, end='') + sys.stdout.flush() + response = method(url) + safeprint(response) + response.raise_for_status() + return response + +def download_file(url, filehandle, hookfunction=None, headers={}, bytespersecond=None): + if bytespersecond is not None: + limiter = ratelimiter.Ratelimiter(allowance_per_period=bytespersecond, period=1) else: - totalsize = 1 + limiter = None + currentblock = 0 - downloading = requests.get(url, stream=True, headers=headers, auth=auth) + downloading = requests.get(url, stream=True, headers=headers) + totalsize = int(downloading.headers.get('content-length', 1)) for chunk in downloading.iter_content(chunk_size=DOWNLOAD_CHUNK): - if chunk: - currentblock += 1 - filehandle.write(chunk) - if hookfunction is not None: - hookfunction(currentblock, DOWNLOAD_CHUNK, totalsize) + if not chunk: + break + currentblock += 1 + filehandle.write(chunk) + if limiter is not None: + limiter.limit(len(chunk)) + if hookfunction is not None: + hookfunction(currentblock, DOWNLOAD_CHUNK, totalsize) + filehandle.close() size = os.path.getsize(filehandle.name) if size < totalsize: raise Exception('Did not receive expected total size. %d / %d' % (size, totalsize)) return True -def file_to_dict(filename): - filehandle = open(filename, 'rb') - jdict = json.loads(filehandle.read().decode('utf-8')) - filehandle.close() - return jdict - -def filepath_sanitize(text, exclusions=''): - bet = FILENAME_BADCHARS.replace(exclusions, '') +def filepath_sanitize(text, allowed=''): + bet = FILENAME_BADCHARS.replace(allowed, '') for char in bet: text = text.replace(char, '') return text +def get_clipboard(): + import tkinter + t = tkinter.Tk() + clip = t.clipboard_get() + t.destroy() + return clip + def hashit(text, length=None): + import hashlib h = hashlib.sha512(text.encode('utf-8')).hexdigest() if length is not None: h = h[:length] @@ -230,12 +444,66 @@ def hook1(currentblock, chunksize, totalsize): if currentbytes == totalsize: print() +def listget(l, index, default=None): + try: + return l[index] + except IndexError: + return default + +def longest_length(li): + longest = 0 + for item in li: + longest = max(longest, len(item)) + return longest + def safeprint(text, **kwargs): text = str(text) text = text.encode('ascii', 'replace').decode() text = text.replace('?', '_') print(text, **kwargs) +def smart_insert(sql, cur, url=None, head=None, commit=True): + ''' + INSERT or UPDATE the appropriate entry. + ''' + if bool(url) is bool(head): + raise ValueError('One and only one of `url` or `head` is necessary.') + + if url is not None: + # When doing a basic scan, all we get is the URL. + content_length = None + content_type = None + + elif head is not None: + # When doing a full scan, we get a Response object. + url = head.url + content_length = head.headers.get('Content-Length', None) + if content_length is not None: + content_length = int(content_length) + content_type = head.headers.get('Content-Type', None) + + basename = url_to_filepath(url)[2] + basename = urllib.parse.unquote(basename) + do_download = True + cur.execute('SELECT * FROM urls WHERE url == ?', [url]) + existing_entry = cur.fetchone() + is_new = existing_entry is None + data = (url, basename, content_length, content_type, do_download) + if is_new: + + cur.execute('INSERT INTO urls VALUES(?, ?, ?, ?, ?)', data) + else: + command = ''' + UPDATE urls SET + content_length = coalesce(?, content_length), + content_type = coalesce(?, content_type) + WHERE url == ? + ''' + cur.execute(command, [content_length, content_type, url]) + if commit: + sql.commit() + return data + def url_to_filepath(text): text = urllib.parse.unquote(text) parts = urllib.parse.urlsplit(text) @@ -244,89 +512,230 @@ def url_to_filepath(text): while folder.startswith('/'): folder = folder[1:] - # Folders are allowed to have slashes - folder = filepath_sanitize(folder, exclusions='/\\') + # Folders are allowed to have slashes... + folder = filepath_sanitize(folder, allowed='/\\') folder = folder.replace('\\', os.path.sep) folder = folder.replace('/', os.path.sep) - # But Files are not. + # ...but Files are not. filename = filepath_sanitize(filename) + return (root, folder, filename) +## ## +## GENERAL FUNCTIONS ############################################################################### -## Commandline functions ####################################################\\ -def digest(website, outputfile, fullscan, *trash): - fullscan = bool(fullscan) - if website[-1] != '/': - website += '/' - walker = Walker(website, outputfile, fullscan=fullscan) - try: - walker.walk() - dict_to_file(walker.results, outputfile) - except: - dict_to_file(walker.results, outputfile) - traceback.print_exc() - print('SAVED PROGRESS SO FAR') -def download(urlfile, outputdir, overwrite, *trash): - downloader = Downloader(urlfile, outputdir) - downloader.download(overwrite) +## COMMANDLINE FUNCTIONS ########################################################################### +## ## +def digest(args): + fullscan = args.fullscan + if isinstance(fullscan, str): + fullscan = bool(eval(fullscan)) + walkurl = args.walkurl + if walkurl == '!clipboard': + walkurl = get_clipboard() + safeprint('From clipboard: %s' % walkurl) + walker = Walker( + databasename=args.databasename, + fullscan=fullscan, + walkurl=walkurl, + ) + walker.walk() -def filter_pattern(urlfile, patterns, negative=False, *trash): +def download(args): + bytespersecond = args.bytespersecond + if isinstance(bytespersecond, str): + bytespersecond = eval(bytespersecond) + + downloader = Downloader( + databasename=args.databasename, + outputdir=args.outputdir, + ) + downloader.download( + bytespersecond=bytespersecond, + overwrite=args.overwrite, + ) + +def filter_pattern(databasename, regex, action='keep', *trash): ''' - When `negative` is True, items are kept when they do NOT match the pattern, - allowing you to delete trash files. + When `action` is 'keep', then any URLs matching the regex will have their + `do_download` flag set to True. - When `negative` is False, items are keep when they DO match the pattern, - allowing you to keep items of interest. + When `action` is 'remove', then any URLs matching the regex will have their + `do_download` flag set to False. + + Actions will not act on each other's behalf. A 'keep' will NEVER disable a url, + and 'remove' will NEVER enable one. ''' - if isinstance(patterns, str): - patterns = [patterns] - jdict = file_to_dict(urlfile) - keys = list(jdict.keys()) - for key in keys: - for pattern in patterns: - contains = re.search(pattern, key) is not None - if contains ^ negative: - safeprint('Removing "%s"' % key) - del jdict[key] - dict_to_file(jdict, urlfile) + import re + if isinstance(regex, str): + regex = [regex] -def keep_pattern(urlfile, patterns, *trash): - filter_pattern(urlfile=urlfile, patterns=patterns, negative=True) + keep = action == 'keep' + remove = action == 'remove' -def measure(urlfile, *trash): - jdict = file_to_dict(urlfile) - totalbytes = 0 - for (url, info) in jdict.items(): - bytes = info['Content-Length'] - if bytes > 0: - totalbytes += bytes - bytestring = '{:,}'.format(totalbytes) - print(bytestring) - return totalbytes + sql = sqlite3.connect(databasename) + cur = sql.cursor() + cur2 = sql.cursor() -def remove_pattern(urlfile, patterns, *trash): - filter_pattern(urlfile=urlfile, patterns=patterns, negative=False) - -def listget(l, index, default=None): - try: - return l[index] - except IndexError: - return default -cmdfunctions = [digest, download, keep_pattern, measure, remove_pattern] -## End of commandline functions #############################################// - -if __name__ == '__main__': - command = listget(sys.argv, 1, None) - arg1 = listget(sys.argv, 2, None) - arg2 = listget(sys.argv, 3, None) - arg3 = listget(sys.argv, 4, None) - if command is None: - quit() - did_something = False - for function in cmdfunctions: - if command == function.__name__: - function(arg1, arg2, arg3) - did_something = True + cur2.execute('SELECT * FROM urls') + while True: + fetch = cur2.fetchone() + if fetch is None: break - if not did_something: - print('No matching function') \ No newline at end of file + url = fetch[SQL_URL] + current_do_dl = fetch[SQL_DO_DOWNLOAD] + for pattern in regex: + contains = re.search(pattern, url) is not None + + should_keep = (keep and contains) + if keep and contains and not current_do_dl: + safeprint('Keeping "%s"' % url) + cur.execute('UPDATE urls SET do_download = 1 WHERE url == ?', [url]) + if remove and contains and current_do_dl: + safeprint('Removing "%s"' % url) + cur.execute('UPDATE urls SET do_download = 0 WHERE url == ?', [url]) + sql.commit() + +def keep_pattern(args): + ''' + See `filter_pattern`. + ''' + filter_pattern( + action='keep', + databasename=args.databasename, + regex=args.regex, + ) + +def list_basenames(args): + ''' + Given a database, print the entries in order of the file basenames. + This makes it easier to find interesting titles without worrying about + what directory they're in. + ''' + databasename = args.databasename + outputfile = args.outputfile + + sql = sqlite3.connect(databasename) + cur = sql.cursor() + cur.execute('SELECT basename FROM urls WHERE do_download == 1 ORDER BY LENGTH(basename) DESC LIMIT 1') + + longest = len(cur.fetchone()[0]) + cur.execute('SELECT * FROM urls WHERE do_download == 1 ORDER BY basename') + form = '{bn:<%ds} : {url}' % longest + if outputfile: + outputfile = open(outputfile, 'w', encoding='utf-8') + while True: + fetch = cur.fetchone() + if fetch is None: + break + line = form.format(bn=fetch[SQL_BASENAME], url=fetch[SQL_URL]) + if outputfile: + outputfile.write(line + '\n') + else: + print(line) + if outputfile: + outputfile.close() + +def measure(args): + ''' + Given a database, print the sum of all Content-Lengths. + If `fullscan`, then URLs with no Content-Length will be + HEAD requested, and the result will be saved back into the file. + ''' + databasename = args.databasename + fullscan = args.fullscan + if isinstance(fullscan, str): + fullscan = bool(fullscan) + + totalsize = 0 + sql = sqlite3.connect(databasename) + cur1 = sql.cursor() + cur2 = sql.cursor() + cur2.execute('SELECT * FROM urls WHERE do_download == 1') + filecount = 0 + files_without_size = 0 + try: + while True: + fetch = cur2.fetchone() + if fetch is None: + break + size = fetch[SQL_CONTENT_LENGTH] + if size is None: + if fullscan: + url = fetch[SQL_URL] + head = do_head(url) + fetch = smart_insert(sql, cur1, head=head, commit=False) + size = fetch[SQL_CONTENT_LENGTH] + if size is None: + safeprint('"%s" is not revealing Content-Length' % url) + size = 0 + else: + files_without_size += 1 + size = 0 + totalsize += size + filecount += 1 + except: + sql.commit() + raise + + sql.commit() + short_string = bytes_to_unit_string(totalsize) + totalsize_string = '{} ({:,} bytes) in {:,} files'.format(short_string, totalsize, filecount) + print(totalsize_string) + if files_without_size > 0: + print('Note: %d files do not have a stored Content-Length.' % files_without_size) + print('Run `measure` with `-f` or `--fullscan` to HEAD request those files.') + return totalsize + +def remove_pattern(args): + ''' + See `filter_pattern`. + ''' + filter_pattern( + action='remove', + databasename=args.databasename, + regex=args.regex, + ) +## ## +## COMMANDLINE FUNCTIONS ########################################################################### + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + subparsers = parser.add_subparsers() + + p_digest = subparsers.add_parser('digest') + p_digest.add_argument('walkurl') + p_digest.add_argument('-db', '--database', dest='databasename', default=None) + p_digest.add_argument('-f', '--fullscan', action='store_true') + p_digest.set_defaults(func=digest) + + p_download = subparsers.add_parser('download') + p_download.add_argument('databasename') + p_download.add_argument('-o', '--outputdir', dest='outputdir', default=None) + p_download.add_argument('-ow', '--overwrite', dest='overwrite', default=False) + p_download.add_argument('-bps', '--bytespersecond', dest='bytespersecond', default=None) + p_download.set_defaults(func=download) + + p_keep_pattern = subparsers.add_parser('keep_pattern') + p_keep_pattern.add_argument('databasename') + p_keep_pattern.add_argument('regex') + p_keep_pattern.set_defaults(func=keep_pattern) + + p_list_basenames = subparsers.add_parser('list_basenames') + p_list_basenames.add_argument('databasename') + p_list_basenames.add_argument('-o', '--outputfile', dest='outputfile', default=None) + p_list_basenames.set_defaults(func=list_basenames) + + p_measure = subparsers.add_parser('measure') + p_measure.add_argument('databasename') + p_measure.add_argument('-f', '--fullscan', action='store_true') + p_measure.set_defaults(func=measure) + + p_remove_pattern = subparsers.add_parser('remove_pattern') + p_remove_pattern.add_argument('databasename') + p_remove_pattern.add_argument('regex') + p_remove_pattern.set_defaults(func=remove_pattern) + + args = parser.parse_args() + args.func(args) diff --git a/OpenDirDL/ratelimiter.py b/OpenDirDL/ratelimiter.py new file mode 100644 index 0000000..55f856e --- /dev/null +++ b/OpenDirDL/ratelimiter.py @@ -0,0 +1,56 @@ +import time + + +class Ratelimiter: + def __init__(self, allowance_per_period, period, operation_cost=1, mode='sleep'): + ''' + allowance_per_period: + The number of operations we can perform per `period` seconds. + + period: + The number of seconds over which we can perform `allowance_per_period` operations. + + operation_cost: + The default amount to remove from our balance after each operation. + Pass a `cost` parameter to `self.limit` to use a nondefault value. + + mode: + 'sleep': If we do not have the balance for an operation, sleep until we do. + Return True every time. + 'reject': If we do not have the balance for an operation, return False. + ''' + if mode not in ('sleep', 'reject'): + raise ValueError('Invalid mode %s' % repr(mode)) + self.allowance_per_period = allowance_per_period + self.period = period + self.operation_cost = operation_cost + self.mode = mode + + self.last_operation = time.time() + self.balance = 0 + self.gain_rate = allowance_per_period / period + + def limit(self, cost=None): + if cost is None: + cost = self.operation_cost + timediff = time.time() - self.last_operation + self.balance += timediff * self.gain_rate + self.balance = min(self.balance, self.allowance_per_period) + successful = False + + deficit = cost - self.balance + if deficit > 0 and self.mode == 'sleep': + time_needed = (deficit / self.gain_rate) + #print(self.balance, deficit, 'Need to sleep %f' % time_needed) + time.sleep(time_needed) + self.balance = cost + + #print(self.balance) + if self.balance >= cost: + #print('pass') + self.balance -= cost + successful = True + + self.last_operation = time.time() + + return successful diff --git a/Steganographic/steganographic.py b/Steganographic/steganographic.py index 5e5f06e..f5da08c 100644 --- a/Steganographic/steganographic.py +++ b/Steganographic/steganographic.py @@ -99,15 +99,24 @@ class BitsToImage: class ImageToBits: def __init__(self, image, bitness): self.image = image + self.bitness = bitness self.width = image.size[0] + self.height = image.size[1] self.pixel_index = -1 + self.bit_index = bitness self.active_byte = [] + self.pixels = self.image.getdata() + #self.bits = '' + #for pixel in self.pixels: + # for channel in pixel: + # self.bits += binary(channel)[-bitness:] + #print(len(self.bits)) + def _read(self): if len(self.active_byte) == 0: self.pixel_index += 1 - (x, y) = index_to_xy(self.pixel_index, self.width) - self.active_byte = list(self.image.getpixel((x, y))) + self.active_byte = self.pixels[self.pixel_index] self.active_byte = self.active_byte[:3] self.active_byte = [binary(channel) for channel in self.active_byte] self.active_byte = [channel[-bitness:] for channel in self.active_byte] @@ -115,6 +124,7 @@ class ImageToBits: self.active_byte = list(self.active_byte) ret = self.active_byte.pop(0) + self.bit_index += 1 return ret def read(self, bits=1): @@ -196,24 +206,14 @@ def encode(imagefilename, secretfilename, bitness=1): secret_content_length = (secret_size) + (len(secret_extension)) + 1 requiredpixels = math.ceil(((secret_content_length * 8) + 32) / (3 * bitness)) if totalpixels < requiredpixels: - raise StegError('Image does not have enough pixels to store the Secret' + raise StegError('Image does not have enough pixels to store the Secret. ' 'Must have at least %d pixels' % requiredpixels) print('%d pixels available, %d required' % (totalpixels, requiredpixels)) # --> YOU ARE HERE <-- - # Because bitness may be between 1 and 8, we need to create a writing buffer - # called `binary_write_buffer`, so that we're always writing the same amount - # of data per color channel. - # If we were to write the secret length / extension on the fly, we might end - # up using the wrong number of bits for the final channel of some pixel. - # Example: 10010101 broken into groups of 3 is [100, 101, 01] - # Note that the last group is not the same size as the desired bitness, and - # will cause decode errors. - pixel = list(image.getpixel((0, 0))) - binary_write_buffer = '' # Write secret length secret_content_length_b = binary(secret_content_length).rjust(32, '0')