diff --git a/pyproject.toml b/pyproject.toml index a6d5c34..3f7a037 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -71,6 +71,7 @@ dev = [ "tox-pdm>=0.7.2", "tox>=4.13.0", "pytest>=8.0.2", + "colorama>=0.4.6" ] [[tool.pdm.autoexport]] diff --git a/requirements.txt b/requirements.txt index b6ef46d..6e26298 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,3 +12,4 @@ humanfriendly==10.0 \ pyreadline3==3.5.4; sys_platform == "win32" and python_version >= "3.8" \ --hash=sha256:8d57d53039a1c75adba8e50dd3d992b28143480816187ea5efbd5c78e6c885b7 \ --hash=sha256:eaf8e6cc3c49bcccf145fc6067ba8643d1df34d604a1ec0eccbf7a18e6d3fae6 +colorama>=0.4.6 diff --git a/src/bypass_url_parser/__init__.py b/src/bypass_url_parser/__init__.py index 6150e8f..7b66460 100755 --- a/src/bypass_url_parser/__init__.py +++ b/src/bypass_url_parser/__init__.py @@ -2,6 +2,7 @@ """Bypass Url Parser, made with love by @TheLaluka A tool that tests MANY url bypasses to reach a 40X protected page. + Usage: bypass-url-parser (-u | -R ) [-m ] [-o ] [-S ] [ (-H
)...] [-r ] [-s ] [--spoofip-replace] [-p ] [--spoofport-replace] [-t ] [-T ] @@ -63,6 +64,8 @@ from shutil import which from typing import Any, overload from urllib.parse import ParseResult, urlparse +from colorama import Fore, Style, init as _cinit +_cinit(autoreset=True) import coloredlogs from docopt import docopt @@ -1589,6 +1592,17 @@ def get_formatted_response(self, with_content_length=False, trunk_redirect_url=T :param bool trunk_redirect_url: If True, truncate the size of redirection url :return: Formatted curl item response. Ex: [403] [text/html] [548] [13] [68] [403 Forbidden] [] """ + + # Pick a colour once per call + if 200 <= self.response_status_code < 300: + sc_token = f"{Fore.GREEN}{self.response_status_code}{Style.RESET_ALL}" + elif 300 <= self.response_status_code < 400: + sc_token = f"{Fore.BLUE}{self.response_status_code}{Style.RESET_ALL}" + elif 400 <= self.response_status_code < 500: + sc_token = f"{Fore.YELLOW}{self.response_status_code}{Style.RESET_ALL}" + else: + sc_token = f"{Fore.RED}{self.response_status_code}{Style.RESET_ALL}" + # Limit the size of the redirect URL (optional) redirect_url = self.response_redirect_url if redirect_url and trunk_redirect_url: @@ -1596,12 +1610,12 @@ def get_formatted_response(self, with_content_length=False, trunk_redirect_url=T # Use it for full response output (content_length and full redirect_url) if with_content_length: - return f"[{self.response_status_code}] [{self.response_content_type}] [{self.response_content_length}] " \ + return f"[{sc_token}] [{self.response_status_code}] [{self.response_content_type}] [{self.response_content_length}] " \ f"[{self.response_lines_count}] [{self.response_words_count}] [{self.response_title}] " \ f"[{self.response_server_type}] [{self.response_redirect_url}]" # Use it for response aggregating (no content_length and trunked redirect_url) else: - return f"[{self.response_status_code}] [{self.response_content_type}] [{self.response_lines_count}] " \ + return f"[{sc_token}] [{self.response_status_code}] [{self.response_content_type}] [{self.response_lines_count}] " \ f"[{self.response_words_count}] [{self.response_title}] [{self.response_server_type}] " \ f"[{redirect_url}]"