Доброго всем времени суток. Пишу фаззер и нужно что бы в нем работало все через argparse, тобишь ввод url за аргументом -u или --url, а так же словаря -w или --wordlist
Я написал, но всеравно работает и без этих аргументов
argparse в функции def check_app_keys()
и аргументы под __main__
Я написал, но всеравно работает и без этих аргументов
argparse в функции def check_app_keys()
и аргументы под __main__
Python:
import requests
import sys
import os
import colorama
from colorama import Fore
import argparse
colorama.init()
DOMAIN = ""
DIRS = []
def greetings():
"""Функция отображает приветствие пользователя"""
print(Fore.GREEN + '''
╔═══╗╔══╗╔═══╗ ╔═══╗╔╗─╔╗╔════╗╔════╗╔═══╗╔═══╗
╚╗╔╗║╚╣║╝║╔═╗║ ║╔══╝║║─║║╚══╗═║╚══╗═║║╔══╝║╔═╗║
─║║║║─║║─║╚═╝║ ║╚══╗║║─║║──╔╝╔╝──╔╝╔╝║╚══╗║╚═╝║
─║║║║─║║─║╔╗╔╝ ║╔══╝║║─║║─╔╝╔╝──╔╝╔╝─║╔══╝║╔╗╔╝
╔╝╚╝║╔╣║╗║║║╚╗ ║║───║╚═╝║╔╝═╚═╗╔╝═╚═╗║╚══╗║║║╚╗
╚═══╝╚══╝╚╝╚═╝ ╚╝───╚═══╝╚════╝╚════╝╚═══╝╚╝╚═╝
''' + Fore.RESET)
def check_wordlist_file(path_to_wordlist):
"""Функция проверяет наличие файла со словарём"""
if not os.path.isfile(path_to_wordlist.replace("\'", "")):
print(f"{path_to_wordlist}\nФайл со словарём не найден.")
sys.exit(0)
fill_dirs_from_file(path_to_wordlist)
def writetxt(results):
with open('fuzz.txt', 'a', encoding='utf-8') as file:
file.write(results + '\n')
def check_site_annotaion(hostname):
"""Функция проверяет есть ли коннект с хостом"""
try:
response = requests.get(hostname, headers={
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36"},
timeout=1)
response.raise_for_status()
if response.status_code == 200:
print('OK!')
except (requests.exceptions.HTTPError, requests.exceptions.Timeout) as e:
print('ERROR: %s' % e)
set_url_format(hostname)
def set_url_format(hostname):
"""Функция проверяет форматирование url сайта"""
global DOMAIN
if hostname[-1] != "/":
hostname += "/"
DOMAIN = hostname
def check_args_qnt(args_qnt):
"""Функция проверяет количество аргументов"""
if len(args_qnt) != 3:
print('\033[94m' +
'To use the program, specify the domain and wordlist https://site.com /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt')
sys.exit(0)
def check_app_keys():
"""Функция проверяет правильность аргументов"""
if not args.wordlist:
parser.print_help()
sys.exit(0)
elif not args.url:
parser.print_help()
sys.exit(0)
print(f"\nРаботаем с сайтом {sys.argv[1]}. Путь к словарю {sys.argv[2]}\n")
def fill_dirs_from_file(dirs_file):
"""Функция читает файл с адресами папок в список"""
with open(dirs_file, "r") as reader:
for line in reader.readlines():
DIRS.append(line)
print("\nЗагружено строк из словаря: " + str(len(DIRS)) + "\n")
def get_site_dirs():
"""Функция проверки директорий"""
counter = 0
try:
for target_dir in DIRS:
target_url = DOMAIN + target_dir.strip() + "/"
host_answer = requests.get(target_url)
counter += 1
if host_answer.status_code == 404:
print(
f"{counter:08d} of {len(DIRS)}\t{Fore.RED + str(host_answer.status_code) + Fore.RESET}\t{target_url}")
writetxt(f"{counter:08d} of {len(DIRS)}\t{host_answer.status_code}\t{target_url}")
continue
else:
print(
f"{counter:08d} of {len(DIRS)}\t{Fore.GREEN + str(host_answer.status_code) + Fore.RESET}\t{target_url}")
writetxt(f"{counter:08d} of {len(DIRS)}\t{host_answer.status_code}\t{target_url}")
except KeyboardInterrupt:
print(Fore.RED + ' ERROR: manually stop Ctrl+C' + Fore.RESET)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='To use the program, specify the domain and wordlist https://site.com /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt')
parser.add_argument('-u', '--url', help='Enter url, Like https://site.com')
parser.add_argument('-w', '--wordlist', help='Enter your wordlist file')
args = parser.parse_args()
greetings()
check_app_keys()
get_site_dirs()