From 4ea4dd5994c2ddbeab63582ebbd0acbcddebeb62 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Wed, 14 May 2025 19:56:06 +0300 Subject: [PATCH 01/45] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9816e7d..374513f 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@

-Static Badge Static Badge +Static Badge Static Badge Static Badge Static Badge

From 04a61dd3490361cb9093a058da442bf09254b9e5 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Wed, 14 May 2025 19:56:37 +0300 Subject: [PATCH 02/45] Bumped version --- service/cli_init.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/cli_init.py b/service/cli_init.py index d504c7b..1a3d7f3 100644 --- a/service/cli_init.py +++ b/service/cli_init.py @@ -20,7 +20,7 @@ def welcome_menu(self): fig = Figlet(font=wm_font) print('\n') self.console.print(fig.renderText('DPULSE'), style=preview_style) - print(Fore.MAGENTA + Style.BRIGHT + '[DPULSE-CLI] - [v1.3 stable] - [OSINT-TECHNOLOGIES]\n' + Style.RESET_ALL) + print(Fore.MAGENTA + Style.BRIGHT + '[DPULSE-CLI] - [v1.3.1 rolling] - [OSINT-TECHNOLOGIES]\n' + Style.RESET_ALL) print(Fore.MAGENTA + Style.BRIGHT + '[Visit our pages]\nGitHub repository: https://github.com/OSINT-TECHNOLOGIES\nPyPi page: https://pypi.org/project/dpulse/\nDocumentation: https://dpulse.readthedocs.io' + Style.RESET_ALL) def print_main_menu(self): From a22a12c895105120374d63c35b2f3dd3edf9c99f Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Wed, 14 May 2025 21:09:42 +0300 Subject: [PATCH 03/45] Added long query for demonstrating PS process in HTML report --- pagesearch/pagesearch_parsers.py | 212 ++++++++++++++++--------------- 1 file changed, 110 insertions(+), 102 deletions(-) diff --git a/pagesearch/pagesearch_parsers.py b/pagesearch/pagesearch_parsers.py index 5e72e51..c6933e8 100644 --- a/pagesearch/pagesearch_parsers.py +++ b/pagesearch/pagesearch_parsers.py @@ -1,14 +1,26 @@ +import os +import re +import sys +import fitz import requests + from bs4 import BeautifulSoup -import re +from typing import List, Tuple from colorama import Fore, Style -import os -import fitz -import sys + sys.path.append('service') from logs_processing import logging from cli_init import print_ps_cli_report +ansi_re = re.compile(r'\x1b\[[0-9;]*[mK]') + +def make_recorder(storage: List[str]): + def _rec(*parts, sep=" ", end="\n"): + msg = sep.join(str(p) for p in parts) + end + print(msg, end="") + storage.append(ansi_re.sub("", msg)) + return _rec + def extract_text_from_pdf(filename: str) -> str: try: logging.info('TEXT EXTRACTION FROM PDF (PAGESEARCH): OK') @@ -18,16 +30,15 @@ def extract_text_from_pdf(filename: str) -> str: text += page.get_text() return text except Exception as e: - print(Fore.RED + f"Can't open some PDF file. See journal for details" + Style.RESET_ALL) + print(Fore.RED + "Can't open some PDF file. See journal for details" + Style.RESET_ALL) logging.error(f'TEXT EXTRACTION FROM PDF (PAGESEARCH): ERROR. REASON: {e}') - pass + return "" -def find_keywords_in_pdfs(ps_docs_path, keywords: list) -> dict: +def find_keywords_in_pdfs(ps_docs_path, keywords: List[str]) -> Tuple[dict, int]: try: logging.info('KEYWORDS SEARCH IN PDF (PAGESEARCH): OK') pdf_files = [f for f in os.listdir(ps_docs_path) if f.lower().endswith(".pdf")] - results = {} - pdf_with_keywords = 0 + results, pdf_with_keywords = {}, 0 for pdf_file in pdf_files: pdf_path = os.path.join(ps_docs_path, pdf_file) extracted_text = extract_text_from_pdf(pdf_path) @@ -39,42 +50,30 @@ def find_keywords_in_pdfs(ps_docs_path, keywords: list) -> dict: pdf_with_keywords += 1 return results, pdf_with_keywords except Exception as e: - print(Fore.RED + f"Can't find keywords. See journal for details") + print(Fore.RED + "Can't find keywords. See journal for details" + Style.RESET_ALL) logging.error(f'KEYWORDS SEARCH IN PDF (PAGESEARCH): ERROR. REASON: {e}') - pass + return {}, 0 def clean_bad_pdfs(ps_docs_path): pdf_files = [f for f in os.listdir(ps_docs_path) if f.lower().endswith(".pdf")] - bad_pdfs = [] for pdf_file in pdf_files: try: - full_path = os.path.join(ps_docs_path, pdf_file) - fitz.open(filename=full_path) + fitz.open(filename=os.path.join(ps_docs_path, pdf_file)) except Exception: - bad_pdfs.append(pdf_file) - pass - if len(bad_pdfs) > 0: - corrupted_pdfs_counter = 0 - for pdfs in bad_pdfs: - os.remove(os.path.join(ps_docs_path, pdfs)) - corrupted_pdfs_counter += 1 - print(Fore.GREEN + f"Found {corrupted_pdfs_counter} corrupted PDF files. Deleting...") - else: - print(Fore.GREEN + "Corrupted PDF files were not found" + Style.RESET_ALL) + os.remove(os.path.join(ps_docs_path, pdf_file)) def subdomains_parser(subdomains_list, report_folder, keywords, keywords_flag): + report_lines: List[str] = [] + p = make_recorder(report_lines) print(Fore.GREEN + "Conducting PageSearch. Please, be patient, it may take a long time\n" + Style.RESET_ALL) - ps_docs_path = report_folder + '//ps_documents' + ps_docs_path = os.path.join(report_folder, 'ps_documents') if not os.path.exists(ps_docs_path): os.makedirs(ps_docs_path) + email_pattern = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' - total_emails = [] - accessible_subdomains = 0 - files_counter = 0 - website_elements_counter = 0 - exposed_passwords_counter = 0 - api_keys_counter = 0 - cookies_counter = 0 + total_emails, keywords_messages_list = [], [] + accessible_subdomains = files_counter = website_elements_counter = 0 + exposed_passwords_counter = api_keys_counter = cookies_counter = 0 tried_subdomains_counter = 0 for url in subdomains_list: @@ -85,14 +84,16 @@ def subdomains_parser(subdomains_list, report_folder, keywords, keywords_flag): if response.status_code == 200: accessible_subdomains += 1 soup = BeautifulSoup(response.content, 'html.parser') + else: + continue except Exception as e: - print(Fore.RED + "Can't access some subdomain. See journal for details") + print(Fore.RED + "Can't access some subdomain. See journal for details" + Style.RESET_ALL) logging.error(f'ACCESSING SUBDOMAIN (PAGESEARCH): ERROR. REASON: {e}') - pass + continue try: logging.info('WEB RESOURCE ADDITIONAL INFO GATHERING (PAGESEARCH): OK') - title = soup.title.string + title = soup.title.string if soup.title else "No title" emails = re.findall(email_pattern, soup.text) total_emails.append(emails) if not emails: @@ -101,105 +102,112 @@ def subdomains_parser(subdomains_list, report_folder, keywords, keywords_flag): search_query_input = soup.find('input', {'name': 'q'}) customization_input = soup.find('input', {'name': 'language'}) passwords = soup.find_all('input', {'type': 'password'}) - print(Fore.LIGHTGREEN_EX + "-------------------------------------------------" + Style.RESET_ALL) - print(Fore.GREEN + "Page number: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{tried_subdomains_counter}/{len(subdomains_list)}" + Style.RESET_ALL) - print(Fore.GREEN + "Page URL: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{url}" + Style.RESET_ALL) - print(Fore.GREEN + "Page title: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{title}" + Style.RESET_ALL) - print(Fore.GREEN + "Found e-mails: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{', '.join(emails)}" + Style.RESET_ALL) - - if customization_input and customization_input.get('value') is not None and len(customization_input.get('value')) > 0: - print(Fore.GREEN + "Found site customization setting: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{customization_input.get('value')}" + Style.RESET_ALL) + p(Fore.LIGHTGREEN_EX + "-------------------------------------------------" + Style.RESET_ALL) + p(Fore.GREEN + "Page number: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{tried_subdomains_counter}/{len(subdomains_list)}" + Style.RESET_ALL) + p(Fore.GREEN + "Page URL: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{url}" + Style.RESET_ALL) + p(Fore.GREEN + "Page title: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{title}" + Style.RESET_ALL) + p(Fore.GREEN + "Found e-mails: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{', '.join(emails)}" + Style.RESET_ALL) + + if customization_input and customization_input.get('value'): + p(Fore.GREEN + "Found site customization setting: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{customization_input.get('value')}" + Style.RESET_ALL) website_elements_counter += 1 - if search_query_input and search_query_input.get('value') is not None and len(search_query_input.get('value')) > 0: - print(Fore.GREEN + "Found search query: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{search_query_input.get('value')}" + Style.RESET_ALL) + if search_query_input and search_query_input.get('value'): + p(Fore.GREEN + "Found search query: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{search_query_input.get('value')}" + Style.RESET_ALL) website_elements_counter += 1 for hidden_input in hidden_inputs: - if hidden_input is not None and hidden_input.get('value') is not None and len(hidden_input.get('value')) > 0: - print(Fore.GREEN + "Found hidden form data: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{hidden_input.get('value')}" + Style.RESET_ALL) + if hidden_input and hidden_input.get('value'): + p(Fore.GREEN + "Found hidden form data: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{hidden_input.get('value')}" + Style.RESET_ALL) website_elements_counter += 1 for password in passwords: - if password is not None and password.get('value') is not None and len(password.get('value')) > 0: - print(Fore.GREEN + "Found exposed password: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{password.get('value')}" + Style.RESET_ALL) + if password and password.get('value'): + p(Fore.GREEN + "Found exposed password: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{password.get('value')}" + Style.RESET_ALL) exposed_passwords_counter += 1 - api_keys = soup.find_all('input', attrs={'type': 'apikey'}) for key in api_keys: key_value = key.get('value') - print(Fore.GREEN + f"Found API Key: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{key_value}") + p(Fore.GREEN + f"Found API Key: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{key_value}" + Style.RESET_ALL) api_keys_counter += 1 cookies_dict = response.cookies for cookie_name, cookie_value in cookies_dict.items(): - print(Fore.GREEN + "Found cookie: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{cookie_name}. " + Style.RESET_ALL + Fore.GREEN + "Value: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{cookie_value}" + Style.RESET_ALL) + p(Fore.GREEN + "Found cookie: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{cookie_name}. " + Style.RESET_ALL + Fore.GREEN + "Value: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{cookie_value}" + Style.RESET_ALL) cookies_counter += 1 except Exception as e: - print(Fore.RED + "Error while getting detailed info on web resource. See journal for details") + print(Fore.RED + "Error while getting detailed info on web resource. See journal for details" + Style.RESET_ALL) logging.error(f'WEB RESOURCE ADDITIONAL INFO GATHERING (PAGESEARCH): ERROR. REASON: {e}') - pass try: logging.info('FILES EXTRACTION (PAGESEARCH): OK') links = soup.find_all('a') for link in links: href = link.get('href') - if href: - if href.lower().endswith(('.docx', '.xlsx', '.csv', '.pdf', '.pptx', '.doc', '.ppt', '.xls', '.rtf', '.conf', '.config', '.db', '.sql', '.json', '.txt')): - document_url = 'http://' + url + href - print(Fore.GREEN + "Found document: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{document_url}" + Style.RESET_ALL) - response = requests.get(document_url) - file_extensions = { - '.docx': 'extracted_{}.docx', - '.xlsx': 'extracted_{}.xlsx', - '.pdf': 'extracted_{}.pdf', - '.csv': 'extracted_{}.csv', - '.pptx': 'extracted_{}.pptx', - '.doc': 'extracted_{}.doc', - '.ppt': 'extracted_{}.ppt', - '.xls': 'extracted_{}.xls', - '.json': 'extracted_{}.json', - '.txt': 'extracted_{}.txt', - '.sql': 'extracted_{}.sql', - '.db': 'extracted_{}.db', - '.config': 'extracted_{}.config', - '.conf': 'extracted_{}.conf' - } - if response.status_code == 200: - if href: - file_extension = os.path.splitext(href.lower())[1] - if file_extension in file_extensions: - filename = os.path.basename(href) - extracted_path = os.path.join(ps_docs_path, file_extensions[file_extension].format( - os.path.splitext(filename)[0])) - with open(extracted_path, 'wb') as file: - file.write(response.content) - files_counter += 1 - print(Fore.GREEN + "File was successfully saved") + if href and href.lower().endswith(('.docx', '.xlsx', '.csv', '.pdf', '.pptx', '.doc', '.ppt', '.xls', '.rtf', '.conf', '.config', '.db', '.sql', '.json', '.txt')): + document_url = 'http://' + url + href + p(Fore.GREEN + "Found document: " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{document_url}" + Style.RESET_ALL) + response_doc = requests.get(document_url) + file_extensions = { + '.docx': 'extracted_{}.docx', + '.xlsx': 'extracted_{}.xlsx', + '.pdf': 'extracted_{}.pdf', + '.csv': 'extracted_{}.csv', + '.pptx': 'extracted_{}.pptx', + '.doc': 'extracted_{}.doc', + '.ppt': 'extracted_{}.ppt', + '.xls': 'extracted_{}.xls', + '.json': 'extracted_{}.json', + '.txt': 'extracted_{}.txt', + '.sql': 'extracted_{}.sql', + '.db': 'extracted_{}.db', + '.config': 'extracted_{}.config', + '.conf': 'extracted_{}.conf' + } + if response_doc.status_code == 200: + file_extension = os.path.splitext(href.lower())[1] + if file_extension in file_extensions: + filename = os.path.basename(href) + extracted_path = os.path.join(ps_docs_path, file_extensions[file_extension].format(os.path.splitext(filename)[0])) + with open(extracted_path, 'wb') as file: + file.write(response_doc.content) + files_counter += 1 + p(Fore.GREEN + "File was successfully saved" + Style.RESET_ALL) except Exception as e: - print(Fore.RED + "This file can't be accessed to extract it. See journal for details") + print(Fore.RED + "This file can't be accessed to extract it. See journal for details" + Style.RESET_ALL) logging.error(f'FILES EXTRACTION (PAGESEARCH): ERROR. REASON: {e}') - pass + p(Fore.LIGHTGREEN_EX + "-------------------------------------------------" + Style.RESET_ALL) ps_emails_list = [x for x in total_emails if x] ps_emails_return = [', '.join(sublist) for sublist in ps_emails_list] clean_bad_pdfs(ps_docs_path) - keywords_messages_list = [] + + pdf_with_keywords = 0 if keywords_flag == 1: print(Fore.GREEN + "Searching keywords in PDF files..." + Style.RESET_ALL) - try: - pdf_results, pdf_with_keywords = find_keywords_in_pdfs(ps_docs_path, keywords) - for pdf_file, found_keywords in pdf_results.items(): - print(Fore.GREEN + f"Keywords " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{', '.join(found_keywords)}" + Style.RESET_ALL + Fore.GREEN + f" found in '{pdf_file}'" + Style.RESET_ALL) - keywords_messages_list.append(f"Keywords {', '.join(found_keywords)} found in '{pdf_file}'") - except Exception as e: - print(Fore.RED + f"Can't find keywords. See journal for details") - logging.error(f'KEYWORDS SEARCH IN PDF (PAGESEARCH): ERROR. REASON: {e}') - pdf_with_keywords = 0 + pdf_results, pdf_with_keywords = find_keywords_in_pdfs(ps_docs_path, keywords) + for pdf_file, found_keywords in pdf_results.items(): + p(Fore.GREEN + f"Keywords " + Fore.LIGHTCYAN_EX + Style.BRIGHT + f"{', '.join(found_keywords)}" + Style.RESET_ALL + Fore.GREEN + f" found in '{pdf_file}'" + Style.RESET_ALL) + keywords_messages_list.append(f"Keywords {', '.join(found_keywords)} found in '{pdf_file}'") + print_ps_cli_report(subdomains_list, accessible_subdomains, ps_emails_return, files_counter, cookies_counter, api_keys_counter, website_elements_counter, exposed_passwords_counter) if keywords_flag == 0: - print(Fore.RED + "[+] Keywords were not gathered because of None user input") - return ps_emails_return, accessible_subdomains, len(ps_emails_return), files_counter, cookies_counter, api_keys_counter, website_elements_counter, exposed_passwords_counter, ['No keywords were found because of None user input'] + print(Fore.RED + "[+] Keywords were not gathered because of None user input" + Style.RESET_ALL) + keywords_messages_list = ['No keywords were found because of None user input'] else: - print(Fore.GREEN + f"[+] Total {pdf_with_keywords} keywords were found in PDF files") - return ps_emails_return, accessible_subdomains, len(ps_emails_return), files_counter, cookies_counter, api_keys_counter, website_elements_counter, exposed_passwords_counter, keywords_messages_list + print(Fore.GREEN + f"[+] Total {pdf_with_keywords} keywords were found in PDF files" + Style.RESET_ALL) + + data_tuple = ( + ps_emails_return, + accessible_subdomains, + len(ps_emails_return), + files_counter, + cookies_counter, + api_keys_counter, + website_elements_counter, + exposed_passwords_counter, + keywords_messages_list + ) + + exclude = ("Conducting PageSearch", "Searching keywords", "Keywords were not gathered", "Total ") + pagesearch_query = "\n".join(line for line in report_lines if not line.startswith(exclude)) + return data_tuple, pagesearch_query From f64abac270ce9f862bcdad25ab4d516eb1295833 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Wed, 14 May 2025 21:10:37 +0300 Subject: [PATCH 04/45] Added support for PageSearch process listing in HTML report --- datagather_modules/data_assembler.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/datagather_modules/data_assembler.py b/datagather_modules/data_assembler.py index 5089c8d..1c88def 100644 --- a/datagather_modules/data_assembler.py +++ b/datagather_modules/data_assembler.py @@ -206,7 +206,17 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k if subdomains[0] != 'No subdomains were found': to_search_array = [subdomains, social_medias, sd_socials] print(Fore.LIGHTMAGENTA_EX + "\n[EXTENDED SCAN START: PAGESEARCH]\n" + Style.RESET_ALL) - ps_emails_return, accessible_subdomains, emails_amount, files_counter, cookies_counter, api_keys_counter, website_elements_counter, exposed_passwords_counter, keywords_messages_list = subdomains_parser(to_search_array[0], report_folder, keywords, keywords_flag) + ( + ps_emails_return, + accessible_subdomains, + emails_amount, + files_counter, + cookies_counter, + api_keys_counter, + website_elements_counter, + exposed_passwords_counter, + keywords_messages_list + ), ps_string = subdomains_parser(to_search_array[0], report_folder, keywords, keywords_flag) total_links_counter = accessed_links_counter = "No results because PageSearch does not gather these categories" if len(keywords_messages_list) == 0: keywords_messages_list = ['No keywords were found'] @@ -282,7 +292,7 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k hostnames, cpes, tags, vulns, common_socials, total_socials, ps_emails_return, accessible_subdomains, emails_amount, files_counter, cookies_counter, api_keys_counter, website_elements_counter, exposed_passwords_counter, total_links_counter, accessed_links_counter, keywords_messages_list, dorking_status, dorking_file_path, - virustotal_output, securitytrails_output, hudsonrock_output] + virustotal_output, securitytrails_output, hudsonrock_output, ps_string] report_info_array = [casename, db_casename, db_creation_date, report_folder, ctime, report_file_type, report_ctime, api_scan_db, used_api_flag] logging.info(f'### THIS LOG PART FOR {casename} CASE, TIME: {ctime} ENDS HERE') From f9455eab274d3edf0e6d52d2616b47b5d057886f Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Wed, 14 May 2025 21:11:23 +0300 Subject: [PATCH 05/45] Added support for PageSearch process listing in HTML report --- reporting_modules/html_report_creation.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/reporting_modules/html_report_creation.py b/reporting_modules/html_report_creation.py index 0f67527..4a304a7 100644 --- a/reporting_modules/html_report_creation.py +++ b/reporting_modules/html_report_creation.py @@ -79,6 +79,7 @@ def report_assembling(short_domain, url, case_comment, data_array, report_info_a virustotal_output = data_array[45] securitytrails_output = data_array[46] hudsonrock_output = data_array[47] + ps_string = data_array[48] casename = report_info_array[0] db_casename = report_info_array[1] db_creation_date = report_info_array[2] @@ -147,7 +148,7 @@ def report_assembling(short_domain, url, case_comment, data_array, report_info_a 'dorking_status': dorking_status, 'add_dsi': add_dsi, 'ps_s': accessible_subdomains, 'ps_e': emails_amount, 'ps_f': files_counter, 'ps_c': cookies_counter, 'ps_a': api_keys_counter, 'ps_w': website_elements_counter, 'ps_p': exposed_passwords_counter, 'ss_l': total_links_counter, 'ss_a': accessed_links_counter, 'hudsonrock_output': hudsonrock_output, "snapshotting_ui_mark": snapshotting_ui_mark, - 'virustotal_output': virustotal_output, 'securitytrails_output': securitytrails_output} + 'virustotal_output': virustotal_output, 'securitytrails_output': securitytrails_output, 'ps_string': ps_string} html_report_name = report_folder + '//' + casename if generate_report(context, html_report_name, template_path): From 9b478c1a466ba79879db3025f5b509e4d60370b3 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Wed, 14 May 2025 21:16:11 +0300 Subject: [PATCH 06/45] Added support for PageSearch process listing --- service/pdf_report_templates/default_report_temp.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/service/pdf_report_templates/default_report_temp.html b/service/pdf_report_templates/default_report_temp.html index 3c6b6eb..5123a2b 100644 --- a/service/pdf_report_templates/default_report_temp.html +++ b/service/pdf_report_templates/default_report_temp.html @@ -195,6 +195,8 @@

Amount of found API key: {{ps_a}}

Amount of WEB elements found: {{ps_w}}

Amount of exposed passwords found: {{ps_p}}

+

PageSearch process listing:

+
{{ ps_string }}

 


 
From df7b19728c36dad54cce05a38a8c445fe866d048 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Thu, 15 May 2025 22:53:35 +0300 Subject: [PATCH 07/45] Updated default report template visual --- .../default_report_temp.html | 515 ++++++++++-------- 1 file changed, 293 insertions(+), 222 deletions(-) diff --git a/service/pdf_report_templates/default_report_temp.html b/service/pdf_report_templates/default_report_temp.html index 5123a2b..51481f0 100644 --- a/service/pdf_report_templates/default_report_temp.html +++ b/service/pdf_report_templates/default_report_temp.html @@ -1,226 +1,297 @@ - + - + + OSINT report for {{ sh_domain }} + -

Open Source Information Research Report

-

{{org}}

-

 

-
-
 
-

Table of contents

-

1. General scan information

-

[BASIC SCAN INFO]

-

2. WHOIS information

-

3. Social medias links

-

4. Subdomains information

-

5. DNS & SSL information

-

6. Services & frameworks information

-

7. Basic pre-pentest information

-

[DORKING SCAN INFO]

-

8. Dorking queries and results links (if was selected)

-

[PAGESEARCH SCAN INFO]

-

9. PageSearch results (if was selected)

-

[API SCAN INFO]

-

10. VirusTotal API scan results (if was selected)

-

11. SecurityTrails API scan results (if was selected)

-

12. HudsonRock API scan results (if was selected)

-

 

-
-
 
-

GENERAL SCAN INFORMATION

-

Total subdomains found: {{a_tsf}}

-

Total social media links found: {{a_tsm}}

-

Status of robots.txt extraction: {{robots_txt_result}}

-

Status of sitemap.xml extraction: {{sitemap_xml_result}}

-

Status of sitemap.xml links extraction: {{sitemap_links}}

-

Google Dorking status: {{dorking_status}}

-

PageSearch conduction: {{pagesearch_ui_mark}}

-

Snapshotting conduction: {{snapshotting_ui_mark}}

-

Report creation time: {{ctime}}

-

 

-
-
 
-

WHOIS INFORMATION

-

Domain: {{sh_domain}}

-

Full URL: {{full_url}}

-

IP address: {{ip_address}}

-

Registrar: {{registrar}}

-

Creation date: {{creation_date}}

-

Expiration date: {{expiration_date}}

-

Organization name: {{org}}

-

Contact e-mails: {{mails}}

-

 

-
-
 
-

SOCIAL MEDIAS SEARCH RESULTS

-

FACEBOOK:

-
    {% for link in fb_links %} -
  • => {{ link }}
  • - {% endfor %}
-

TWITTER (+ X.com):

-
    {% for link in tw_links %} -
  • => {{ link }}
  • - {% endfor %}
-
    {% for link in xcom_links %} -
  • => {{ link }}
  • - {% endfor %}
-

INSTAGRAM:

-
    {% for link in inst_links %} -
  • => {{ link }}
  • - {% endfor %}
-

TELEGRAM:

-
    {% for link in tg_links %} -
  • => {{ link }}
  • - {% endfor %}
-

TIKTOK:

-
    {% for link in tt_links %} -
  • => {{ link }}
  • - {% endfor %}
-

LINKEDIN:

-
    {% for link in li_links %} -
  • => {{ link }}
  • - {% endfor %}
-

VKONTAKTE:

-
    {% for link in vk_links %} -
  • => {{ link }}
  • - {% endfor %}
-

YOUTUBE:

-
    {% for link in yt_links %} -
  • => {{ link }}
  • - {% endfor %}
-

ODNOKLASSNIKI:

-
    {% for link in ok_links %} -
  • => {{ link }}
  • - {% endfor %}
-

WECHAT:

-
    {% for link in wc_links %} -
  • => {{ link }}
  • - {% endfor %}
-

 

-
-
 
-

SUBDOMAINS ANALYSIS RESULTS

-

Found subdomains:

-
    {% for sd in subdomains %} -
  • => {{ sd }}
  • - {% endfor %}
-

Subdomains IP addresses:

-
    {% for sdip in subdomain_ip %} -
  • => {{ sdip }}
  • - {% endfor %}
-

Subdomains e-mails:

-
    {% for smails in subdomain_mails %} -
  • => {{ smails }}
  • - {% endfor %}
-

 

-
-
 
-

DNS & SSL INFORMATION

-

(DNS) Name servers: {{name_servers}}

-

(DNS) MX addresses: {{mx_records}}

-

(SSL) Issuer: {{issuer}}

-

(SSL) Subject: {{subject}}

-

(SSL) Not before: {{notBefore}}

-

(SSL) Not after: {{notAfter}}

-

(SSL) Certificate name: {{commonName}}

-

(SSL) Certificate serial number: {{serialNumber}}

-

 

-
-
 
-

SERVICES & FRAMEWORKS INFORMATION

-

Web servers:

-
    {% for ws in web_servers %} -
  • => {{ ws }}
  • - {% endfor %}
-

CMS:

-
    {% for cm in cms %} -
  • => {{ cm }}
  • - {% endfor %}
-

Used programming languages:

-
    {% for pl in programming_languages %} -
  • => {{ pl }}
  • - {% endfor %}
-

Used web frameworks:

-
    {% for wf in web_frameworks %} -
  • => {{ wf }}
  • - {% endfor %}
-

Analytics service:

-
    {% for analytic in analytics %} -
  • => {{ analytic }}
  • - {% endfor %}
-

Used JavaScript frameworks:

-
    {% for jsf in javascript_frameworks %} -
  • => {{ jsf }}
  • - {% endfor %}
-

Tags:

-
    {% for tag in tags %} -
  • => {{ tag }}
  • - {% endfor %}
-

Common Platform Enumeration:

-
    {% for cpe in cpes %} -
  • => {{ cpe }}
  • - {% endfor %}
-

 

-
-
 
-

BASIC PRE-PENTEST INFORMATION

-

Open ports:

-
    {% for op in ports %} -
  • => {{ op }}
  • - {% endfor %}
-

Hostnames:

-
    {% for hn in hostnames %} -
  • => {{ hn }}
  • - {% endfor %}
-

Potential vulnerabilities:

-
    {% for vuln in vulns %} -
  • => {{ vuln }}
  • - {% endfor %}
-

 

-
-
 
-

DORKING SCAN INFO

-
{{ add_dsi | safe }}
-

 

-
-
 
-

PAGESEARCH RESULTS

-

 

-

Amount of accessible subdomains: {{ps_s}}

-

Amount of email addresses: {{ps_e}}

-

Amount of found documents: {{ps_f}}

-

Amount of found cookies: {{ps_c}}

-

Amount of found API key: {{ps_a}}

-

Amount of WEB elements found: {{ps_w}}

-

Amount of exposed passwords found: {{ps_p}}

-

PageSearch process listing:

-
{{ ps_string }}
-

 

-
-
 
-

VIRUSTOTAL API SCAN RESULTS

-

 

-
{{ virustotal_output }}
-

 

-
-

 

-

SECURITYTRAILS API SCAN RESULTS

-

 

-
{{ securitytrails_output }}
-

 

-
-

 

-

HUDSONROCK API SCAN RESULTS

-

 

-

{{ hudsonrock_output }}

-

 

-
-

 

-

Created using DPULSE software by OSINT-TECHNOLOGIES

-

Visit our web-pages:

-
    -
  • https://github.com/OSINT-TECHNOLOGIES
  • -
  • https://pypi.org/project/dpulse/
  • -
+ +

Open Source Information Research Report

+

{{ org }}

+
+

Table of contents

+

1. General scan information

+

[BASIC SCAN INFO]

+

2. WHOIS information

+

3. Social medias links

+

4. Subdomains information

+

5. DNS & SSL information

+

6. Services & frameworks information

+

7. Basic pre-pentest information

+

[DORKING SCAN INFO]

+

8. Dorking queries and results links (if was selected)

+

[PAGESEARCH SCAN INFO]

+

9. PageSearch results (if was selected)

+

[API SCAN INFO]

+

10. VirusTotal API scan results (if was selected)

+

11. SecurityTrails API scan results (if was selected)

+

12. HudsonRock API scan results (if was selected)

+ +
+

GENERAL SCAN INFORMATION

+

Total subdomains found: {{ a_tsf }}

+

Total social media links found: {{ a_tsm }}

+

Status of robots.txt extraction: {{ robots_txt_result }}

+

Status of sitemap.xml extraction: {{ sitemap_xml_result }}

+

Status of sitemap.xml links extraction: {{ sitemap_links }}

+

Google Dorking status: {{ dorking_status }}

+

PageSearch conduction: {{ pagesearch_ui_mark }}

+

Snapshotting conduction: {{ snapshotting_ui_mark }}

+

Report creation time: {{ ctime }}

+ +
+

WHOIS INFORMATION

+

Domain: {{ sh_domain }}

+

Full URL: {{ full_url }}

+

IP address: {{ ip_address }}

+

Registrar: {{ registrar }}

+

Creation date: {{ creation_date }}

+

Expiration date: {{ expiration_date }}

+

Organization name: {{ org }}

+

Contact e-mails: {{ mails }}

+ +
+

SOCIAL MEDIAS SEARCH RESULTS

+

FACEBOOK:

+
    + {% for link in fb_links %} +
  • ⇒ {{ link }}
  • + {% endfor %} +
+

TWITTER (+ X.com):

+
    + {% for link in tw_links %} +
  • ⇒ {{ link }}
  • + {% endfor %} + {% for link in xcom_links %} +
  • ⇒ {{ link }}
  • + {% endfor %} +
+

INSTAGRAM:

+
    + {% for link in inst_links %} +
  • ⇒ {{ link }}
  • + {% endfor %} +
+

TELEGRAM:

+
    + {% for link in tg_links %} +
  • ⇒ {{ link }}
  • + {% endfor %} +
+

TIKTOK:

+
    + {% for link in tt_links %} +
  • ⇒ {{ link }}
  • + {% endfor %} +
+

LINKEDIN:

+
    + {% for link in li_links %} +
  • ⇒ {{ link }}
  • + {% endfor %} +
+

VKONTAKTE:

+
    + {% for link in vk_links %} +
  • ⇒ {{ link }}
  • + {% endfor %} +
+

YOUTUBE:

+
    + {% for link in yt_links %} +
  • ⇒ {{ link }}
  • + {% endfor %} +
+

ODNOKLASSNIKI:

+
    + {% for link in ok_links %} +
  • ⇒ {{ link }}
  • + {% endfor %} +
+

WECHAT:

+
    + {% for link in wc_links %} +
  • ⇒ {{ link }}
  • + {% endfor %} +
+ +
+

SUBDOMAINS ANALYSIS RESULTS

+

Found subdomains:

+
    + {% for sd in subdomains %} +
  • ⇒ {{ sd }}
  • + {% endfor %} +
+ +

Subdomains IP addresses:

+
    + {% for sdip in subdomain_ip %} +
  • ⇒ {{ sdip }}
  • + {% endfor %} +
+ +

Subdomains e-mails:

+
    + {% for smails in subdomain_mails %} +
  • ⇒ {{ smails }}
  • + {% endfor %} +
+ +
+

DNS & SSL INFORMATION

+

(DNS) Name servers: {{ name_servers }}

+

(DNS) MX addresses: {{ mx_records }}

+

(SSL) Issuer: {{ issuer }}

+

(SSL) Subject: {{ subject }}

+

(SSL) Not before: {{ notBefore }}

+

(SSL) Not after: {{ notAfter }}

+

(SSL) Certificate name: {{ commonName }}

+

(SSL) Certificate serial number: {{ serialNumber }}

+ +
+

SERVICES & FRAMEWORKS INFORMATION

+

Web servers:

+
    + {% for ws in web_servers %} +
  • ⇒ {{ ws }}
  • + {% endfor %} +
+

CMS:

+
    + {% for cm in cms %} +
  • ⇒ {{ cm }}
  • + {% endfor %} +
+

Used programming languages:

+
    + {% for pl in programming_languages %} +
  • ⇒ {{ pl }}
  • + {% endfor %} +
+

Used web frameworks:

+
    + {% for wf in web_frameworks %} +
  • ⇒ {{ wf }}
  • + {% endfor %} +
+

Analytics service:

+
    + {% for analytic in analytics %} +
  • ⇒ {{ analytic }}
  • + {% endfor %} +
+

Used JavaScript frameworks:

+
    + {% for jsf in javascript_frameworks %} +
  • ⇒ {{ jsf }}
  • + {% endfor %} +
+

Tags:

+
    + {% for tag in tags %} +
  • ⇒ {{ tag }}
  • + {% endfor %} +
+

Common Platform Enumeration:

+
    + {% for cpe in cpes %} +
  • ⇒ {{ cpe }}
  • + {% endfor %} +
+ +
+

BASIC PRE-PENTEST INFORMATION

+

Open ports:

+
    + {% for op in ports %} +
  • ⇒ {{ op }}
  • + {% endfor %} +
+

Hostnames:

+
    + {% for hn in hostnames %} +
  • ⇒ {{ hn }}
  • + {% endfor %} +
+

Potential vulnerabilities:

+
    + {% for vuln in vulns %} +
  • ⇒ {{ vuln }}
  • + {% endfor %} +
+ +
+

DORKING SCAN INFO

+
{{ add_dsi | safe }}
+ +
+

PAGESEARCH RESULTS

+

Amount of accessible subdomains: {{ ps_s }}

+

Amount of email addresses: {{ ps_e }}

+

Amount of found documents: {{ ps_f }}

+

Amount of found cookies: {{ ps_c }}

+

Amount of found API key: {{ ps_a }}

+

Amount of WEB elements found: {{ ps_w }}

+

Amount of exposed passwords found: {{ ps_p }}

+

PageSearch process listing:

+
{{ ps_string }}
+ +
+

VIRUSTOTAL API SCAN RESULTS

+
{{ virustotal_output }}
+ +
+

SECURITYTRAILS API SCAN RESULTS

+
{{ securitytrails_output }}
+ +
+

HUDSONROCK API SCAN RESULTS

+
{{ hudsonrock_output }}
+ +
+

Created using DPULSE software by OSINT-TECHNOLOGIES

+ +

Visit our web-pages:

+
    +
  • https://github.com/OSINT-TECHNOLOGIES
  • +
  • https://pypi.org/project/dpulse/
  • +
From 5eb4c95e267eb9eeb9f79a1ecb74fa4da1db3d5d Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Fri, 16 May 2025 01:58:00 +0300 Subject: [PATCH 08/45] Fixed error with UnboundVariable (ps_string) when PS is not activated --- datagather_modules/data_assembler.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/datagather_modules/data_assembler.py b/datagather_modules/data_assembler.py index 1c88def..ad6ceff 100644 --- a/datagather_modules/data_assembler.py +++ b/datagather_modules/data_assembler.py @@ -225,11 +225,13 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k print(Fore.RED + "Cant start PageSearch because no subdomains were detected") ps_emails_return = "" accessible_subdomains = files_counter = cookies_counter = api_keys_counter = website_elements_counter = exposed_passwords_counter = total_links_counter = accessed_links_counter = emails_amount = 'No results because no subdomains were found' + ps_string = 'No PageSearch listing provided because no subdomains were found' keywords_messages_list = ['No data was gathered because no subdomains were found'] pass elif pagesearch_flag.lower() == 'n': accessible_subdomains = files_counter = cookies_counter = api_keys_counter = website_elements_counter = exposed_passwords_counter = total_links_counter = accessed_links_counter = emails_amount = keywords_messages_list = "No results because user did not selected PageSearch for this scan" ps_emails_return = "" + ps_string = 'No PageSearch listing provided because user did not selected PageSearch mode for this scan' pass if dorking_flag == 'n': From f1813adf9e8d6cc366e416ecc9bc963dd0b76367 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Fri, 16 May 2025 15:45:09 +0300 Subject: [PATCH 09/45] Reworked Dorking function, moved from MS to selenium --- dorking/dorking_handler.py | 116 +++++++++++++++++++++++++++---------- 1 file changed, 87 insertions(+), 29 deletions(-) diff --git a/dorking/dorking_handler.py b/dorking/dorking_handler.py index 0ff444c..7de15bf 100644 --- a/dorking/dorking_handler.py +++ b/dorking/dorking_handler.py @@ -1,10 +1,20 @@ import sys +from random import random + sys.path.append('service') from config_processing import read_config from logs_processing import logging from ua_rotator import user_agent_rotator from proxies_rotator import proxies_rotator +import random +import logging +from colorama import Fore, Style +import undetected_chromedriver as uc +from selenium.webdriver.common.by import By +from selenium.webdriver.common.keys import Keys +from config_processing import read_config + try: import requests.exceptions from colorama import Fore, Style @@ -27,44 +37,92 @@ def proxy_transfer(): working_proxies = proxies_rotator.check_proxies(proxies_list) return proxy_flag, working_proxies -def solid_google_dorking(query, dorking_delay, delay_step, proxy_flag, proxies_list, pages=100): +def solid_google_dorking(query, proxy_flag, proxies_list, pages=1): + result_query = [] + request_count = 0 try: - browser = mechanicalsoup.StatefulBrowser() + config_values=read_config() + options = uc.ChromeOptions() + options.binary_location = r"{}".format(config_values['dorking_browser']) + options.add_argument("--headless=new") + options.add_argument("--no-sandbox") + options.add_argument("--disable-dev-shm-usage") + options.add_argument("--disable-blink-features=AutomationControlled") + options.add_argument("--disable-infobars") + options.add_argument("--disable-extensions") + options.add_argument(f"user-agent={user_agent_rotator.get_random_user_agent()}") if proxy_flag == 1: - browser.session.proxies = proxies_rotator.get_random_proxy(proxies_list) - else: - pass - browser.open("https://www.google.com/") - browser.select_form('form[action="/search"]') - browser["q"] = str(query) - browser.submit_selected(btnName="btnG") - result_query = [] - request_count = 0 + proxy = proxies_rotator.get_random_proxy(proxies_list) + options.add_argument(f'--proxy-server={proxy["http"]}') + driver = uc.Chrome(options=options) for page in range(pages): try: - for link in browser.links(): - target = link.attrs['href'] - if (target.startswith('/url?') and not target.startswith("/url?q=http://webcache.googleusercontent.com")): - target = re.sub(r"^/url\?q=([^&]*)&.*", r"\1", target) - result_query.append(target) + driver.get("https://www.google.com") + time.sleep(random.uniform(2, 4)) + try: + accepted = False + try: + accept_btn = driver.find_element(By.XPATH, '//button[contains(text(), "Принять все") or contains(text(), "Accept all")]') + driver.execute_script("arguments[0].click();", accept_btn) + print(Fore.GREEN + 'Pressed "Accept all" button!' + Style.RESET_ALL) + accepted = True + time.sleep(random.uniform(2, 3)) + except: + pass + if not accepted: + iframes = driver.find_elements(By.TAG_NAME, "iframe") + for iframe in iframes: + driver.switch_to.frame(iframe) + try: + accept_btn = driver.find_element(By.XPATH, '//button[contains(text(), "Принять все") or contains(text(), "Accept all")]') + driver.execute_script("arguments[0].click();", accept_btn) + print(Fore.GREEN + 'Pressed "Accept all" button!' + Style.RESET_ALL) + accepted = True + driver.switch_to.default_content() + time.sleep(random.uniform(2, 3)) + break + except: + driver.switch_to.default_content() + continue + driver.switch_to.default_content() + if not accepted: + print(Fore.GREEN + "Google TOS button was not found. Seems good..." + Style.RESET_ALL) + except Exception: + print(Fore.RED + f'Error with pressing "Accept all" button. Closing...' + Style.RESET_ALL) + driver.save_screenshot("consent_error.png") + driver.switch_to.default_content() + search_box = driver.find_element(By.NAME, "q") + for char in query: + search_box.send_keys(char) + time.sleep(random.uniform(0.05, 0.2)) + time.sleep(random.uniform(0.5, 1.2)) + search_box.send_keys(Keys.RETURN) + time.sleep(random.uniform(2.5, 4)) + links = driver.find_elements(By.CSS_SELECTOR, 'a') + for link in links: + href = link.get_attribute('href') + if href and href.startswith('http') and 'google.' not in href and 'webcache.googleusercontent.com' not in href: + result_query.append(href) request_count += 1 - if request_count % delay_step == 0: - time.sleep(dorking_delay) - browser.session.headers['User-Agent'] = user_agent_rotator.get_random_user_agent() - browser.follow_link(nr=page + 1) - except mechanicalsoup.LinkNotFoundError: - break + try: + next_button = driver.find_element(By.ID, 'pnnext') + next_button.click() + time.sleep(random.uniform(2, 3)) + except: + break except Exception as e: - logging.error(f'DORKING PROCESSING: ERROR. REASON: {e}') - del result_query[-2:] + logging.error(f'DORKING PROCESSING (SELENIUM): ERROR. REASON: {e}') + continue + driver.quit() + if len(result_query) >= 2: + del result_query[-2:] return result_query - except requests.exceptions.ConnectionError as e: - print(Fore.RED + "Error while establishing connection with domain. No results will appear. See journal for details" + Style.RESET_ALL) - logging.error(f'DORKING PROCESSING: ERROR. REASON: {e}') except Exception as e: logging.error(f'DORKING PROCESSING: ERROR. REASON: {e}') + print(Fore.RED + "Error while running Selenium dorking. See journal for details." + Style.RESET_ALL) + return [] -def save_results_to_txt(folderpath, table, queries, pages=10): +def save_results_to_txt(folderpath, table, queries, pages=1): try: config_values = read_config() dorking_delay = int(config_values['dorking_delay (secs)']) @@ -80,7 +138,7 @@ def save_results_to_txt(folderpath, table, queries, pages=10): for i, query in enumerate(queries, start=1): f.write(f"QUERY #{i}: {query}\n") try: - results = solid_google_dorking(query, dorking_delay, delay_step, proxy_flag, proxies_list, pages) + results = solid_google_dorking(query, proxy_flag, proxies_list, pages) if not results: f.write("=> NO RESULT FOUND\n") total_results.append((query, 0)) From d8b4191478f1bcf9730d5313388ae792ac4def3f Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Fri, 16 May 2025 15:45:44 +0300 Subject: [PATCH 10/45] Added new field for Dorking browser's path --- service/config_processing.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/service/config_processing.py b/service/config_processing.py index 49e0fa1..0dd6177 100644 --- a/service/config_processing.py +++ b/service/config_processing.py @@ -30,14 +30,13 @@ def create_config(): config['HTML_REPORTING'] = {'template': 'default'} config['LOGGING'] = {'log_level': 'info'} config['CLI VISUAL'] = {'preview_color': 'red', 'font': 'slant'} - config['DORKING'] = {'dorking_delay (secs)': '2', 'delay_step': '5'} + config['DORKING'] = {'dorking_delay (secs)': '2', 'delay_step': '5', 'full_path_to_browser': r'path\to\browser\for\dorking'} config['SNAPSHOTTING'] = {'installed_browser': 'firefox', 'opera_browser_path': 'None', 'wayback_retries': '3', 'wayback_req_pause': '2'} config['USER-AGENTS'] = {} for i, agent in enumerate(basic_user_agents): config['USER-AGENTS'][f'agent_{i + 1}'] = agent config['PROXIES'] = {'proxies_file_path': 'NONE'} - with open('service//config.ini', 'w') as configfile: config.write(configfile) @@ -60,7 +59,7 @@ def read_config(): wayback_retries_amount = config.get('SNAPSHOTTING', 'wayback_retries') wayback_requests_pause = config.get('SNAPSHOTTING', 'wayback_req_pause') html_report_template = config.get('HTML_REPORTING', 'template') - + dorking_browser = config.get('DORKING', 'full_path_to_browser') config_values = { 'logging_level': log_level, @@ -74,7 +73,8 @@ def read_config(): 'opera_browser_path': opera_browser_path, 'wayback_retries_amount': wayback_retries_amount, 'wayback_requests_pause': wayback_requests_pause, - 'template': html_report_template + 'template': html_report_template, + 'dorking_browser': dorking_browser } return config_values From ba7ee8e0e65e3c1fa37e85e5a14b4089eb406b4a Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Wed, 21 May 2025 01:35:32 +0300 Subject: [PATCH 11/45] Delete service/pdf_report_templates/paragraph_report_template.html --- .../paragraph_report_template.html | 154 ------------------ 1 file changed, 154 deletions(-) delete mode 100644 service/pdf_report_templates/paragraph_report_template.html diff --git a/service/pdf_report_templates/paragraph_report_template.html b/service/pdf_report_templates/paragraph_report_template.html deleted file mode 100644 index cf966ab..0000000 --- a/service/pdf_report_templates/paragraph_report_template.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - - - -

Open Source Research Report

-

{{org}}

-
- -

Table of Contents

-
-

1. General scan information

-

2. WHOIS information

-

3. Social medias links

-

4. Subdomains information

-

5. DNS & SSL information

-

6. Services & frameworks

-

7. Basic pre-pentest information

-

8. Dorking scan info

-

9. PageSearch results

-

10. API scan results

-
-
- -

GENERAL SCAN INFO

-
-

Total subdomains: {{a_tsf}}

-

Total social media links: {{a_tsm}}

-

Status of robots.txt: {{robots_txt_result}}

-

Status of sitemap.xml: {{sitemap_xml_result}}

-

Status of sitemap links: {{sitemap_links}}

-

Google Dorking: {{dorking_status}}

-

PageSearch: {{pagesearch_ui_mark}}

-

Snapshotting: {{snapshotting_ui_mark}}

-

Report time: {{ctime}}

-
-
- -

WHOIS INFORMATION

-
-

Domain: {{sh_domain}}

-

Full URL: {{full_url}}

-

IP address: {{ip_address}}

-

Registrar: {{registrar}}

-

Creation date: {{creation_date}}

-

Expiration date: {{expiration_date}}

-

Organization name: {{org}}

-

Contact e-mails: {{mails}}

-
-
- -

SOCIAL MEDIAS SEARCH RESULTS

-
-

FACEBOOK:

    {% for link in fb_links %}
  • ⇒ {{ link }}
  • {% endfor %}
-

TWITTER (+ X.com):

    {% for link in tw_links %}
  • ⇒ {{ link }}
  • {% endfor %}{% for link in xcom_links %}
  • ⇒ {{ link }}
  • {% endfor %}
-

INSTAGRAM:

    {% for link in inst_links %}
  • ⇒ {{ link }}
  • {% endfor %}
-

TELEGRAM:

    {% for link in tg_links %}
  • ⇒ {{ link }}
  • {% endfor %}
-

TIKTOK:

    {% for link in tt_links %}
  • ⇒ {{ link }}
  • {% endfor %}
-

LINKEDIN:

    {% for link in li_links %}
  • ⇒ {{ link }}
  • {% endfor %}
-

VKONTAKTE:

    {% for link in vk_links %}
  • ⇒ {{ link }}
  • {% endfor %}
-

YOUTUBE:

    {% for link in yt_links %}
  • ⇒ {{ link }}
  • {% endfor %}
-

ODNOKLASSNIKI:

    {% for link in ok_links %}
  • ⇒ {{ link }}
  • {% endfor %}
-

WECHAT:

    {% for link in wc_links %}
  • ⇒ {{ link }}
  • {% endfor %}
-
-
- -

SUBDOMAINS ANALYSIS RESULTS

-
-

Found subdomains:

    {% for sd in subdomains %}
  • ⇒ {{ sd }}
  • {% endfor %}
-

Subdomains IP addresses:

    {% for sdip in subdomain_ip %}
  • ⇒ {{ sdip }}
  • {% endfor %}
-

Subdomains e-mails:

    {% for smails in subdomain_mails %}
  • ⇒ {{ smails }}
  • {% endfor %}
-
-
- -

DNS & SSL INFORMATION

-
-

(DNS) Name servers: {{name_servers}}

-

(DNS) MX addresses: {{mx_records}}

-

(SSL) Issuer: {{issuer}}

-

(SSL) Subject: {{subject}}

-

(SSL) Not before: {{notBefore}}

-

(SSL) Not after: {{notAfter}}

-

(SSL) Certificate name: {{commonName}}

-

(SSL) Certificate serial number: {{serialNumber}}

-
-
- -

SERVICES & FRAMEWORKS INFORMATION

-
-

Web servers:

    {% for ws in web_servers %}
  • ⇒ {{ ws }}
  • {% endfor %}
-

CMS:

    {% for cm in cms %}
  • ⇒ {{ cm }}
  • {% endfor %}
-

Used programming languages:

    {% for pl in programming_languages %}
  • ⇒ {{ pl }}
  • {% endfor %}
-

Used web frameworks:

    {% for wf in web_frameworks %}
  • ⇒ {{ wf }}
  • {% endfor %}
-

Analytics service:

    {% for analytic in analytics %}
  • ⇒ {{ analytic }}
  • {% endfor %}
-

Used JavaScript frameworks:

    {% for jsf in javascript_frameworks %}
  • ⇒ {{ jsf }}
  • {% endfor %}
-

Tags:

    {% for tag in tags %}
  • ⇒ {{ tag }}
  • {% endfor %}
-

Common Platform Enumeration:

    {% for cpe in cpes %}
  • ⇒ {{ cpe }}
  • {% endfor %}
-
-
- -

BASIC PRE-PENTEST INFORMATION

-
-

Open ports:

    {% for op in ports %}
  • ⇒ {{ op }}
  • {% endfor %}
-

Hostnames:

    {% for hn in hostnames %}
  • ⇒ {{ hn }}
  • {% endfor %}
-

Potential vulnerabilities:

    {% for vuln in vulns %}
  • ⇒ {{ vuln }}
  • {% endfor %}
-
-
- -

DORKING SCAN INFO

-
{{ add_dsi | safe }}
-
- -

PAGESEARCH RESULTS

-
-

Amount of accessible subdomains: {{ps_s}}

-

Amount of email addresses: {{ps_e}}

-

Amount of found documents: {{ps_f}}

-

Amount of found cookies: {{ps_c}}

-

Amount of found API key: {{ps_a}}

-

Amount of WEB elements found: {{ps_w}}

-

Amount of exposed passwords found: {{ps_p}}

-
-
- -

VIRUSTOTAL API SCAN RESULTS

-
{{ virustotal_output }}
-
- -

SECURITYTRAILS API SCAN RESULTS

-
{{ securitytrails_output }}
-
- -

HUDSONROCK API SCAN RESULTS

-
{{ hudsonrock_output }}
-
- -

Created by DPULSE (OSINT-TECHNOLOGIES)

- - - - \ No newline at end of file From f0f72c43344dd453b8668fa6c801f252a89d22bf Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Wed, 21 May 2025 01:35:40 +0300 Subject: [PATCH 12/45] Delete service/pdf_report_templates/compromise_report_template.html --- .../compromise_report_template.html | 120 ------------------ 1 file changed, 120 deletions(-) delete mode 100644 service/pdf_report_templates/compromise_report_template.html diff --git a/service/pdf_report_templates/compromise_report_template.html b/service/pdf_report_templates/compromise_report_template.html deleted file mode 100644 index 0b7b26b..0000000 --- a/service/pdf_report_templates/compromise_report_template.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - -

OPEN SOURCE RESEARCH REPORT

-

Organization: {{org}}

-
- -

TABLE OF CONTENTS

-
-

1. General scan information

-

2. WHOIS information

-

3. Social medias links

-

4. Subdomains information

-

5. DNS & SSL information

-

6. Services & frameworks

-

7. Basic pre-pentest information

-

8. Dorking scan info

-

9. PageSearch results

-

10. API scan results

-
-
- -

GENERAL SCAN INFO

-
-

Total subdomains: {{a_tsf}}

-

Social media links: {{a_tsm}}

-
Robots.txt: {{robots_txt_result}}
-Sitemap.xml: {{sitemap_xml_result}}
-Dorking: {{dorking_status}}
-
-
- -

WHOIS INFORMATION

-
-

Domain: {{sh_domain}} URL: {{full_url}}

-
IP: {{ip_address}}
-Registrar: {{registrar}}
-Dates: {{creation_date}} → {{expiration_date}}
-
-
- -

SOCIAL MEDIAS

-
-

Facebook:

{% for l in fb_links %}⇒ {{ l }}{% endfor %}
-

Twitter/X:

{% for l in tw_links+xcom_links %}⇒ {{ l }}{% endfor %}
-

Instagram:

{% for l in inst_links %}⇒ {{ l }}{% endfor %}
-
-
- -

SUBDOMAINS

-
-

Found subdomains:

{% for sd in subdomains %}⇒ {{ sd }}{% endfor %}
-

IPs:

{% for sdip in subdomain_ip %}⇒ {{ sdip }}{% endfor %}
-
-
- -

DNS/SSL

-
-
NS: {{name_servers}}
-MX: {{mx_records}}
-SSL Issuer: {{issuer}}
-NotBefore: {{notBefore}}
-NotAfter: {{notAfter}}
-
-
- -

SERVICES

-
-

Web servers:

{% for ws in web_servers %}⇒ {{ ws }}{% endfor %}
-

CMS:

{% for cm in cms %}⇒ {{ cm }}{% endfor %}
-

Languages:

{% for pl in programming_languages %}⇒ {{ pl }}{% endfor %}
-
-
- -

BASIC PRE-PENTEST

-
-

Open ports:

{% for op in ports %}⇒ {{ op }}{% endfor %}
-

Vulnerabilities:

{% for vuln in vulns %}⇒ {{ vuln }}{% endfor %}
-
-
- -

DORKING SCAN

-
{{ add_dsi | safe }}
-
- -

PAGESEARCH

-
-
Subdomains: {{ps_s}}
-Emails: {{ps_e}}
-Documents: {{ps_f}}
-…
-
-
- -

VIRUSTOTAL

-
{{ virustotal_output }}
-

SECURITYTRAILS

-
{{ securitytrails_output }}
-

HUDSONROCK

-
{{ hudsonrock_output }}
-
- -

Created by DPULSE (OSINT-TECHNOLOGIES)

-

- GitHub | - PyPI -

- - - \ No newline at end of file From c214d4952c2662ada2f80ae9391533ecf770f1f6 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Wed, 21 May 2025 01:35:48 +0300 Subject: [PATCH 13/45] Delete service/pdf_report_templates/monospaced_report_template.html --- .../monospaced_report_template.html | 174 ------------------ 1 file changed, 174 deletions(-) delete mode 100644 service/pdf_report_templates/monospaced_report_template.html diff --git a/service/pdf_report_templates/monospaced_report_template.html b/service/pdf_report_templates/monospaced_report_template.html deleted file mode 100644 index e3521a4..0000000 --- a/service/pdf_report_templates/monospaced_report_template.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - - -

OPEN SOURCE RESEARCH REPORT

-
Organization: {{org}}
-
- -

TABLE OF CONTENTS

-
-1. General info
-2. WHOIS
-3. Social medias
-4. Subdomains
-5. DNS/SSL
-6. Services
-7. Pre-pentest
-8. Dorking
-9. PageSearch
-10. APIs
-
-
- -

GENERAL SCAN INFO

-
-Subdomains:  {{a_tsf}}
-Social:      {{a_tsm}}
-Robots.txt:  {{robots_txt_result}}
-Sitemap.xml: {{sitemap_xml_result}}
-Sitemap links: {{sitemap_links}}
-Dorking:     {{dorking_status}}
-PageSearch:  {{pagesearch_ui_mark}}
-Snapshotting: {{snapshotting_ui_mark}}
-Report time: {{ctime}}
-
-
- -

WHOIS INFORMATION

-
-Domain:     {{sh_domain}}
-URL:        {{full_url}}
-IP:         {{ip_address}}
-Registrar:  {{registrar}}
-Created:    {{creation_date}}
-Expires:    {{expiration_date}}
-Emails:     {{mails}}
-
-
- -

SOCIAL MEDIAS SEARCH RESULTS

-
-FACEBOOK:
-{% for link in fb_links %}⇒ {{ link }}{% endfor %}
-TWITTER/X:
-{% for link in tw_links+xcom_links %}⇒ {{ link }}{% endfor %}
-INSTAGRAM:
-{% for link in inst_links %}⇒ {{ link }}{% endfor %}
-TELEGRAM:
-{% for link in tg_links %}⇒ {{ link }}{% endfor %}
-TIKTOK:
-{% for link in tt_links %}⇒ {{ link }}{% endfor %}
-LINKEDIN:
-{% for link in li_links %}⇒ {{ link }}{% endfor %}
-VKONTAKTE:
-{% for link in vk_links %}⇒ {{ link }}{% endfor %}
-YOUTUBE:
-{% for link in yt_links %}⇒ {{ link }}{% endfor %}
-ODNOKLASSNIKI:
-{% for link in ok_links %}⇒ {{ link }}{% endfor %}
-WECHAT:
-{% for link in wc_links %}⇒ {{ link }}{% endfor %}
-
-
- -

SUBDOMAINS ANALYSIS RESULTS

-
-FOUND SUBDOMAINS:
-{% for sd in subdomains %}⇒ {{ sd }}{% endfor %}
-IPs:
-{% for sdip in subdomain_ip %}⇒ {{ sdip }}{% endfor %}
-Emails:
-{% for smails in subdomain_mails %}⇒ {{ smails }}{% endfor %}
-
-
- -

DNS & SSL INFORMATION

-
-NAME SERVERS: {{name_servers}}
-MX RECORDS:  {{mx_records}}
-SSL ISSUER:  {{issuer}}
-SUBJECT:     {{subject}}
-NOT BEFORE:  {{notBefore}}
-NOT AFTER:   {{notAfter}}
-COMMON NAME: {{commonName}}
-SERIAL:      {{serialNumber}}
-
-
- -

SERVICES & FRAMEWORKS INFORMATION

-
-WEB SERVERS:
-{% for ws in web_servers %}⇒ {{ ws }}{% endfor %}
-CMS:
-{% for cm in cms %}⇒ {{ cm }}{% endfor %}
-PROGRAMMING LANGUAGES:
-{% for pl in programming_languages %}⇒ {{ pl }}{% endfor %}
-WEB FRAMEWORKS:
-{% for wf in web_frameworks %}⇒ {{ wf }}{% endfor %}
-ANALYTICS:
-{% for analytic in analytics %}⇒ {{ analytic }}{% endfor %}
-JS FRAMEWORKS:
-{% for jsf in javascript_frameworks %}⇒ {{ jsf }}{% endfor %}
-TAGS:
-{% for tag in tags %}⇒ {{ tag }}{% endfor %}
-CPE:
-{% for cpe in cpes %}⇒ {{ cpe }}{% endfor %}
-
-
- -

BASIC PRE-PENTEST INFORMATION

-
-OPEN PORTS:
-{% for op in ports %}⇒ {{ op }}{% endfor %}
-HOSTNAMES:
-{% for hn in hostnames %}⇒ {{ hn }}{% endfor %}
-POTENTIAL VULNERABILITIES:
-{% for vuln in vulns %}⇒ {{ vuln }}{% endfor %}
-
-
- -

DORKING SCAN INFO

-
{{ add_dsi | safe }}
-
- -

PAGESEARCH RESULTS

-
-SUBDOMAINS FOUND: {{ps_s}}
-EMAILS FOUND:    {{ps_e}}
-DOCUMENTS:       {{ps_f}}
-COOKIES:         {{ps_c}}
-API KEYS:        {{ps_a}}
-WEB ELEMENTS:    {{ps_w}}
-PASSWORDS:       {{ps_p}}
-
-
- -

VIRUSTOTAL API SCAN RESULTS

-
{{ virustotal_output }}
-
- -

SECURITYTRAILS API SCAN RESULTS

-
{{ securitytrails_output }}
-
- -

HUDSONROCK API SCAN RESULTS

-
{{ hudsonrock_output }}
-
- -
-Created by DPULSE (OSINT-TECHNOLOGIES)
-GitHub:  https://github.com/OSINT-TECHNOLOGIES
-PyPI:    https://pypi.org/project/dpulse/
-
- - - \ No newline at end of file From a008fd9b4f433c9da29616e12bd7b76a5e1965fd Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Wed, 21 May 2025 01:41:54 +0300 Subject: [PATCH 14/45] Added config values support for HTML template selection --- reporting_modules/html_report_creation.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/reporting_modules/html_report_creation.py b/reporting_modules/html_report_creation.py index 4a304a7..8fc9932 100644 --- a/reporting_modules/html_report_creation.py +++ b/reporting_modules/html_report_creation.py @@ -10,6 +10,7 @@ from api_hudsonrock import hudsonrock_html_prep from api_virustotal import virustotal_html_prep from api_securitytrails import securitytrails_html_prep +from config_processing import read_config try: from datetime import datetime @@ -92,7 +93,6 @@ def report_assembling(short_domain, url, case_comment, data_array, report_info_a virustotal_output = virustotal_html_prep(virustotal_output) securitytrails_output = securitytrails_html_prep(securitytrails_output) - pdf_templates_path = 'service//pdf_report_templates' if len(ps_emails_return) > 0: subdomain_mails += ps_emails_return @@ -116,7 +116,13 @@ def report_assembling(short_domain, url, case_comment, data_array, report_info_a new_emails = email.split(', ') subdomain_mails_cleaned.extend(new_emails) - template_path = pdf_templates_path + '//default_report_temp.html' + pdf_templates_path = 'service//pdf_report_templates' + config_values = read_config() + selected_template = config_values['template'] + if selected_template.lower() == 'modern': + template_path = pdf_templates_path + '//modern_report_template.html' + elif selected_template.lower() == 'legacy': + template_path = pdf_templates_path + '//legacy_report_template.html' dorking_results_path = report_folder + '//04-dorking_results.txt' if os.path.isfile(dorking_results_path): with open(dorking_results_path, 'r') as f: From babe4ae099f0fc402983e763de2a534a5e2275f4 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Wed, 21 May 2025 01:42:45 +0300 Subject: [PATCH 15/45] Added values for HTML report style selection --- service/config_processing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/config_processing.py b/service/config_processing.py index 0dd6177..3801368 100644 --- a/service/config_processing.py +++ b/service/config_processing.py @@ -27,7 +27,7 @@ def create_config(): ] config = configparser.ConfigParser() - config['HTML_REPORTING'] = {'template': 'default'} + config['HTML_REPORTING'] = {'template': 'modern'} config['LOGGING'] = {'log_level': 'info'} config['CLI VISUAL'] = {'preview_color': 'red', 'font': 'slant'} config['DORKING'] = {'dorking_delay (secs)': '2', 'delay_step': '5', 'full_path_to_browser': r'path\to\browser\for\dorking'} From a39dfb0e64cc056ee364413562f01c95d8efe7e5 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Wed, 21 May 2025 01:49:02 +0300 Subject: [PATCH 16/45] Remaked Default report template into Legacy --- .../legacy_report_template.html | 297 ++++++++++++++++++ 1 file changed, 297 insertions(+) create mode 100644 service/pdf_report_templates/legacy_report_template.html diff --git a/service/pdf_report_templates/legacy_report_template.html b/service/pdf_report_templates/legacy_report_template.html new file mode 100644 index 0000000..51481f0 --- /dev/null +++ b/service/pdf_report_templates/legacy_report_template.html @@ -0,0 +1,297 @@ + + + + + OSINT report for {{ sh_domain }} + + + + +

Open Source Information Research Report

+

{{ org }}

+
+

Table of contents

+

1. General scan information

+

[BASIC SCAN INFO]

+

2. WHOIS information

+

3. Social medias links

+

4. Subdomains information

+

5. DNS & SSL information

+

6. Services & frameworks information

+

7. Basic pre-pentest information

+

[DORKING SCAN INFO]

+

8. Dorking queries and results links (if was selected)

+

[PAGESEARCH SCAN INFO]

+

9. PageSearch results (if was selected)

+

[API SCAN INFO]

+

10. VirusTotal API scan results (if was selected)

+

11. SecurityTrails API scan results (if was selected)

+

12. HudsonRock API scan results (if was selected)

+ +
+

GENERAL SCAN INFORMATION

+

Total subdomains found: {{ a_tsf }}

+

Total social media links found: {{ a_tsm }}

+

Status of robots.txt extraction: {{ robots_txt_result }}

+

Status of sitemap.xml extraction: {{ sitemap_xml_result }}

+

Status of sitemap.xml links extraction: {{ sitemap_links }}

+

Google Dorking status: {{ dorking_status }}

+

PageSearch conduction: {{ pagesearch_ui_mark }}

+

Snapshotting conduction: {{ snapshotting_ui_mark }}

+

Report creation time: {{ ctime }}

+ +
+

WHOIS INFORMATION

+

Domain: {{ sh_domain }}

+

Full URL: {{ full_url }}

+

IP address: {{ ip_address }}

+

Registrar: {{ registrar }}

+

Creation date: {{ creation_date }}

+

Expiration date: {{ expiration_date }}

+

Organization name: {{ org }}

+

Contact e-mails: {{ mails }}

+ +
+

SOCIAL MEDIAS SEARCH RESULTS

+

FACEBOOK:

+
    + {% for link in fb_links %} +
  • ⇒ {{ link }}
  • + {% endfor %} +
+

TWITTER (+ X.com):

+
    + {% for link in tw_links %} +
  • ⇒ {{ link }}
  • + {% endfor %} + {% for link in xcom_links %} +
  • ⇒ {{ link }}
  • + {% endfor %} +
+

INSTAGRAM:

+
    + {% for link in inst_links %} +
  • ⇒ {{ link }}
  • + {% endfor %} +
+

TELEGRAM:

+
    + {% for link in tg_links %} +
  • ⇒ {{ link }}
  • + {% endfor %} +
+

TIKTOK:

+
    + {% for link in tt_links %} +
  • ⇒ {{ link }}
  • + {% endfor %} +
+

LINKEDIN:

+
    + {% for link in li_links %} +
  • ⇒ {{ link }}
  • + {% endfor %} +
+

VKONTAKTE:

+
    + {% for link in vk_links %} +
  • ⇒ {{ link }}
  • + {% endfor %} +
+

YOUTUBE:

+
    + {% for link in yt_links %} +
  • ⇒ {{ link }}
  • + {% endfor %} +
+

ODNOKLASSNIKI:

+
    + {% for link in ok_links %} +
  • ⇒ {{ link }}
  • + {% endfor %} +
+

WECHAT:

+
    + {% for link in wc_links %} +
  • ⇒ {{ link }}
  • + {% endfor %} +
+ +
+

SUBDOMAINS ANALYSIS RESULTS

+

Found subdomains:

+
    + {% for sd in subdomains %} +
  • ⇒ {{ sd }}
  • + {% endfor %} +
+ +

Subdomains IP addresses:

+
    + {% for sdip in subdomain_ip %} +
  • ⇒ {{ sdip }}
  • + {% endfor %} +
+ +

Subdomains e-mails:

+
    + {% for smails in subdomain_mails %} +
  • ⇒ {{ smails }}
  • + {% endfor %} +
+ +
+

DNS & SSL INFORMATION

+

(DNS) Name servers: {{ name_servers }}

+

(DNS) MX addresses: {{ mx_records }}

+

(SSL) Issuer: {{ issuer }}

+

(SSL) Subject: {{ subject }}

+

(SSL) Not before: {{ notBefore }}

+

(SSL) Not after: {{ notAfter }}

+

(SSL) Certificate name: {{ commonName }}

+

(SSL) Certificate serial number: {{ serialNumber }}

+ +
+

SERVICES & FRAMEWORKS INFORMATION

+

Web servers:

+
    + {% for ws in web_servers %} +
  • ⇒ {{ ws }}
  • + {% endfor %} +
+

CMS:

+
    + {% for cm in cms %} +
  • ⇒ {{ cm }}
  • + {% endfor %} +
+

Used programming languages:

+
    + {% for pl in programming_languages %} +
  • ⇒ {{ pl }}
  • + {% endfor %} +
+

Used web frameworks:

+
    + {% for wf in web_frameworks %} +
  • ⇒ {{ wf }}
  • + {% endfor %} +
+

Analytics service:

+
    + {% for analytic in analytics %} +
  • ⇒ {{ analytic }}
  • + {% endfor %} +
+

Used JavaScript frameworks:

+
    + {% for jsf in javascript_frameworks %} +
  • ⇒ {{ jsf }}
  • + {% endfor %} +
+

Tags:

+
    + {% for tag in tags %} +
  • ⇒ {{ tag }}
  • + {% endfor %} +
+

Common Platform Enumeration:

+
    + {% for cpe in cpes %} +
  • ⇒ {{ cpe }}
  • + {% endfor %} +
+ +
+

BASIC PRE-PENTEST INFORMATION

+

Open ports:

+
    + {% for op in ports %} +
  • ⇒ {{ op }}
  • + {% endfor %} +
+

Hostnames:

+
    + {% for hn in hostnames %} +
  • ⇒ {{ hn }}
  • + {% endfor %} +
+

Potential vulnerabilities:

+
    + {% for vuln in vulns %} +
  • ⇒ {{ vuln }}
  • + {% endfor %} +
+ +
+

DORKING SCAN INFO

+
{{ add_dsi | safe }}
+ +
+

PAGESEARCH RESULTS

+

Amount of accessible subdomains: {{ ps_s }}

+

Amount of email addresses: {{ ps_e }}

+

Amount of found documents: {{ ps_f }}

+

Amount of found cookies: {{ ps_c }}

+

Amount of found API key: {{ ps_a }}

+

Amount of WEB elements found: {{ ps_w }}

+

Amount of exposed passwords found: {{ ps_p }}

+

PageSearch process listing:

+
{{ ps_string }}
+ +
+

VIRUSTOTAL API SCAN RESULTS

+
{{ virustotal_output }}
+ +
+

SECURITYTRAILS API SCAN RESULTS

+
{{ securitytrails_output }}
+ +
+

HUDSONROCK API SCAN RESULTS

+
{{ hudsonrock_output }}
+ +
+

Created using DPULSE software by OSINT-TECHNOLOGIES

+ +

Visit our web-pages:

+
    +
  • https://github.com/OSINT-TECHNOLOGIES
  • +
  • https://pypi.org/project/dpulse/
  • +
From 57d419897eed4ceb037286658855ff42a5581980 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Wed, 21 May 2025 01:49:17 +0300 Subject: [PATCH 17/45] Delete service/pdf_report_templates/default_report_temp.html --- .../default_report_temp.html | 297 ------------------ 1 file changed, 297 deletions(-) delete mode 100644 service/pdf_report_templates/default_report_temp.html diff --git a/service/pdf_report_templates/default_report_temp.html b/service/pdf_report_templates/default_report_temp.html deleted file mode 100644 index 51481f0..0000000 --- a/service/pdf_report_templates/default_report_temp.html +++ /dev/null @@ -1,297 +0,0 @@ - - - - - OSINT report for {{ sh_domain }} - - - - -

Open Source Information Research Report

-

{{ org }}

-
-

Table of contents

-

1. General scan information

-

[BASIC SCAN INFO]

-

2. WHOIS information

-

3. Social medias links

-

4. Subdomains information

-

5. DNS & SSL information

-

6. Services & frameworks information

-

7. Basic pre-pentest information

-

[DORKING SCAN INFO]

-

8. Dorking queries and results links (if was selected)

-

[PAGESEARCH SCAN INFO]

-

9. PageSearch results (if was selected)

-

[API SCAN INFO]

-

10. VirusTotal API scan results (if was selected)

-

11. SecurityTrails API scan results (if was selected)

-

12. HudsonRock API scan results (if was selected)

- -
-

GENERAL SCAN INFORMATION

-

Total subdomains found: {{ a_tsf }}

-

Total social media links found: {{ a_tsm }}

-

Status of robots.txt extraction: {{ robots_txt_result }}

-

Status of sitemap.xml extraction: {{ sitemap_xml_result }}

-

Status of sitemap.xml links extraction: {{ sitemap_links }}

-

Google Dorking status: {{ dorking_status }}

-

PageSearch conduction: {{ pagesearch_ui_mark }}

-

Snapshotting conduction: {{ snapshotting_ui_mark }}

-

Report creation time: {{ ctime }}

- -
-

WHOIS INFORMATION

-

Domain: {{ sh_domain }}

-

Full URL: {{ full_url }}

-

IP address: {{ ip_address }}

-

Registrar: {{ registrar }}

-

Creation date: {{ creation_date }}

-

Expiration date: {{ expiration_date }}

-

Organization name: {{ org }}

-

Contact e-mails: {{ mails }}

- -
-

SOCIAL MEDIAS SEARCH RESULTS

-

FACEBOOK:

-
    - {% for link in fb_links %} -
  • ⇒ {{ link }}
  • - {% endfor %} -
-

TWITTER (+ X.com):

-
    - {% for link in tw_links %} -
  • ⇒ {{ link }}
  • - {% endfor %} - {% for link in xcom_links %} -
  • ⇒ {{ link }}
  • - {% endfor %} -
-

INSTAGRAM:

-
    - {% for link in inst_links %} -
  • ⇒ {{ link }}
  • - {% endfor %} -
-

TELEGRAM:

-
    - {% for link in tg_links %} -
  • ⇒ {{ link }}
  • - {% endfor %} -
-

TIKTOK:

-
    - {% for link in tt_links %} -
  • ⇒ {{ link }}
  • - {% endfor %} -
-

LINKEDIN:

-
    - {% for link in li_links %} -
  • ⇒ {{ link }}
  • - {% endfor %} -
-

VKONTAKTE:

-
    - {% for link in vk_links %} -
  • ⇒ {{ link }}
  • - {% endfor %} -
-

YOUTUBE:

-
    - {% for link in yt_links %} -
  • ⇒ {{ link }}
  • - {% endfor %} -
-

ODNOKLASSNIKI:

-
    - {% for link in ok_links %} -
  • ⇒ {{ link }}
  • - {% endfor %} -
-

WECHAT:

-
    - {% for link in wc_links %} -
  • ⇒ {{ link }}
  • - {% endfor %} -
- -
-

SUBDOMAINS ANALYSIS RESULTS

-

Found subdomains:

-
    - {% for sd in subdomains %} -
  • ⇒ {{ sd }}
  • - {% endfor %} -
- -

Subdomains IP addresses:

-
    - {% for sdip in subdomain_ip %} -
  • ⇒ {{ sdip }}
  • - {% endfor %} -
- -

Subdomains e-mails:

-
    - {% for smails in subdomain_mails %} -
  • ⇒ {{ smails }}
  • - {% endfor %} -
- -
-

DNS & SSL INFORMATION

-

(DNS) Name servers: {{ name_servers }}

-

(DNS) MX addresses: {{ mx_records }}

-

(SSL) Issuer: {{ issuer }}

-

(SSL) Subject: {{ subject }}

-

(SSL) Not before: {{ notBefore }}

-

(SSL) Not after: {{ notAfter }}

-

(SSL) Certificate name: {{ commonName }}

-

(SSL) Certificate serial number: {{ serialNumber }}

- -
-

SERVICES & FRAMEWORKS INFORMATION

-

Web servers:

-
    - {% for ws in web_servers %} -
  • ⇒ {{ ws }}
  • - {% endfor %} -
-

CMS:

-
    - {% for cm in cms %} -
  • ⇒ {{ cm }}
  • - {% endfor %} -
-

Used programming languages:

-
    - {% for pl in programming_languages %} -
  • ⇒ {{ pl }}
  • - {% endfor %} -
-

Used web frameworks:

-
    - {% for wf in web_frameworks %} -
  • ⇒ {{ wf }}
  • - {% endfor %} -
-

Analytics service:

-
    - {% for analytic in analytics %} -
  • ⇒ {{ analytic }}
  • - {% endfor %} -
-

Used JavaScript frameworks:

-
    - {% for jsf in javascript_frameworks %} -
  • ⇒ {{ jsf }}
  • - {% endfor %} -
-

Tags:

-
    - {% for tag in tags %} -
  • ⇒ {{ tag }}
  • - {% endfor %} -
-

Common Platform Enumeration:

-
    - {% for cpe in cpes %} -
  • ⇒ {{ cpe }}
  • - {% endfor %} -
- -
-

BASIC PRE-PENTEST INFORMATION

-

Open ports:

-
    - {% for op in ports %} -
  • ⇒ {{ op }}
  • - {% endfor %} -
-

Hostnames:

-
    - {% for hn in hostnames %} -
  • ⇒ {{ hn }}
  • - {% endfor %} -
-

Potential vulnerabilities:

-
    - {% for vuln in vulns %} -
  • ⇒ {{ vuln }}
  • - {% endfor %} -
- -
-

DORKING SCAN INFO

-
{{ add_dsi | safe }}
- -
-

PAGESEARCH RESULTS

-

Amount of accessible subdomains: {{ ps_s }}

-

Amount of email addresses: {{ ps_e }}

-

Amount of found documents: {{ ps_f }}

-

Amount of found cookies: {{ ps_c }}

-

Amount of found API key: {{ ps_a }}

-

Amount of WEB elements found: {{ ps_w }}

-

Amount of exposed passwords found: {{ ps_p }}

-

PageSearch process listing:

-
{{ ps_string }}
- -
-

VIRUSTOTAL API SCAN RESULTS

-
{{ virustotal_output }}
- -
-

SECURITYTRAILS API SCAN RESULTS

-
{{ securitytrails_output }}
- -
-

HUDSONROCK API SCAN RESULTS

-
{{ hudsonrock_output }}
- -
-

Created using DPULSE software by OSINT-TECHNOLOGIES

- -

Visit our web-pages:

-
    -
  • https://github.com/OSINT-TECHNOLOGIES
  • -
  • https://pypi.org/project/dpulse/
  • -
From d06e55f2088e1d6535ebd0a44735690472370b85 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Wed, 21 May 2025 01:50:16 +0300 Subject: [PATCH 18/45] Added Modern version (default now) --- .../modern_report_template.html | 559 ++++++++++++++++++ 1 file changed, 559 insertions(+) create mode 100644 service/pdf_report_templates/modern_report_template.html diff --git a/service/pdf_report_templates/modern_report_template.html b/service/pdf_report_templates/modern_report_template.html new file mode 100644 index 0000000..295da3a --- /dev/null +++ b/service/pdf_report_templates/modern_report_template.html @@ -0,0 +1,559 @@ + + + + + + OSINT Report for {{ sh_domain }} + + + + + +
+ + +
+ + + +

Open Source Information Research Report

+

{{ org }}

+
+ +

GENERAL SCAN INFORMATION

+

Total subdomains found: {{ a_tsf }}

+

Total social media links found: {{ a_tsm }}

+

Status of robots.txt extraction: {{ robots_txt_result }}

+

Status of sitemap.xml extraction: {{ sitemap_xml_result }}

+

Status of sitemap.xml links extraction: {{ sitemap_links }}

+

Google Dorking status: {{ dorking_status }}

+

PageSearch conduction: {{ pagesearch_ui_mark }}

+

Snapshotting conduction: {{ snapshotting_ui_mark }}

+

Report creation time: {{ ctime }}

+ +
+ +

WHOIS INFORMATION

+

Domain: {{ sh_domain }}

+

Full URL: {{ full_url }}

+

IP address: {{ ip_address }}

+

Registrar: {{ registrar }}

+

Creation date: {{ creation_date }}

+

Expiration date: {{ expiration_date }}

+

Organization name: {{ org }}

+

Contact e-mails: {{ mails }}

+ +
+ + +

FACEBOOK:

+
    + {% for link in fb_links %} +
  • {{ link }}
  • + {% endfor %} +
+ +

TWITTER (+ X.com):

+
    + {% for link in tw_links %} +
  • {{ link }}
  • + {% endfor %} + {% for link in xcom_links %} +
  • {{ link }}
  • + {% endfor %} +
+ +

INSTAGRAM:

+
    + {% for link in inst_links %} +
  • {{ link }}
  • + {% endfor %} +
+ +

TELEGRAM:

+
    + {% for link in tg_links %} +
  • {{ link }}
  • + {% endfor %} +
+ +

TIKTOK:

+
    + {% for link in tt_links %} +
  • {{ link }}
  • + {% endfor %} +
+ +

LINKEDIN:

+
    + {% for link in li_links %} +
  • {{ link }}
  • + {% endfor %} +
+ +

VKONTAKTE:

+
    + {% for link in vk_links %} +
  • {{ link }}
  • + {% endfor %} +
+ +

YOUTUBE:

+
    + {% for link in yt_links %} +
  • {{ link }}
  • + {% endfor %} +
+ +

ODNOKLASSNIKI:

+
    + {% for link in ok_links %} +
  • {{ link }}
  • + {% endfor %} +
+ +

WECHAT:

+
    + {% for link in wc_links %} +
  • {{ link }}
  • + {% endfor %} +
+ +
+ +

SUBDOMAINS

+

Found subdomains:

+
    + {% for sd in subdomains %} +
  • {{ sd }}
  • + {% endfor %} +
+ +

Subdomains IP addresses:

+
    + {% for sdip in subdomain_ip %} +
  • ⇒ {{ sdip }}
  • + {% endfor %} +
+ +

Subdomains e-mails:

+
    + {% for smails in subdomain_mails %} +
  • ⇒ {{ smails }}
  • + {% endfor %} +
+ +
+ +

DNS & SSL INFORMATION

+

(DNS) Name servers: {{ name_servers }}

+

(DNS) MX addresses: {{ mx_records }}

+

(SSL) Issuer: {{ issuer }}

+

(SSL) Subject: {{ subject }}

+

(SSL) Not before: {{ notBefore }}

+

(SSL) Not after: {{ notAfter }}

+

(SSL) Certificate name: {{ commonName }}

+

(SSL) Certificate serial number: {{ serialNumber }}

+ +
+ +

SERVICES & FRAMEWORKS INFORMATION

+

Web servers:

+
    + {% for ws in web_servers %} +
  • ⇒ {{ ws }}
  • + {% endfor %} +
+ +

CMS:

+
    + {% for cm in cms %} +
  • ⇒ {{ cm }}
  • + {% endfor %} +
+ +

Used programming languages:

+
    + {% for pl in programming_languages %} +
  • ⇒ {{ pl }}
  • + {% endfor %} +
+ +

Used web frameworks:

+
    + {% for wf in web_frameworks %} +
  • ⇒ {{ wf }}
  • + {% endfor %} +
+ +

Analytics service:

+
    + {% for analytic in analytics %} +
  • ⇒ {{ analytic }}
  • + {% endfor %} +
+ +

Used JavaScript frameworks:

+
    + {% for jsf in javascript_frameworks %} +
  • ⇒ {{ jsf }}
  • + {% endfor %} +
+ +

Tags:

+
    + {% for tag in tags %} +
  • ⇒ {{ tag }}
  • + {% endfor %} +
+ +

Common Platform Enumeration:

+
    + {% for cpe in cpes %} +
  • ⇒ {{ cpe }}
  • + {% endfor %} +
+ +
+ +

BASIC PRE-PENTEST INFORMATION

+

Open ports:

+
    + {% for op in ports %} +
  • ⇒ {{ op }}
  • + {% endfor %} +
+ +

Hostnames:

+
    + {% for hn in hostnames %} +
  • ⇒ {{ hn }}
  • + {% endfor %} +
+ +

Potential vulnerabilities:

+
    + {% for vuln in vulns %} +
  • ⇒ {{ vuln }}
  • + {% endfor %} +
+ +
+ +{% if add_dsi %} +

DORKING SCAN INFO

+
+ Dorking Results +
{{ add_dsi | safe }}
+
+ +
+{% endif %} + +{% if ps_string %} +

PAGESEARCH RESULTS

+

Accessible subdomains: {{ ps_s }}

+

Email addresses: {{ ps_e }}

+

Found documents: {{ ps_f }}

+

Found cookies: {{ ps_c }}

+

Found API keys: {{ ps_a }}

+

Found WEB elements: {{ ps_w }}

+

Exposed passwords: {{ ps_p }}

+
+ PageSearch Process Listing +
{{ ps_string }}
+
+ +
+{% endif %} + +{% if virustotal_output %} +

VIRUSTOTAL API SCAN RESULTS

+
+ VirusTotal Output +
{{ virustotal_output | safe }}
+
+ +
+{% endif %} + +{% if securitytrails_output %} +

SECURITYTRAILS API SCAN RESULTS

+
+ SecurityTrails Output +
{{ securitytrails_output | safe }}
+
+ +
+{% endif %} + +{% if hudsonrock_output %} +

HUDSONROCK API SCAN RESULTS

+
+ HudsonRock Output +
{{ hudsonrock_output | safe }}
+
+ +
+{% endif %} + +

Created using DPULSE software by OSINT-TECHNOLOGIES

+

Visit our web-pages:

+ + + + + \ No newline at end of file From ec63c81ea3e1d5bd68965e13918084c50ebd95a5 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Fri, 23 May 2025 00:57:41 +0300 Subject: [PATCH 19/45] Added "Print" button (using printer and PDF generation) --- .../modern_report_template.html | 362 +++++++----------- 1 file changed, 135 insertions(+), 227 deletions(-) diff --git a/service/pdf_report_templates/modern_report_template.html b/service/pdf_report_templates/modern_report_template.html index 295da3a..fe0ff97 100644 --- a/service/pdf_report_templates/modern_report_template.html +++ b/service/pdf_report_templates/modern_report_template.html @@ -1,202 +1,96 @@ - - - OSINT Report for {{ sh_domain }} - - + + + h1,h2,h3{text-align:center;font-weight:700;font-family:var(--font-main);margin:24px 0 12px;} + h1{font-size:28px;text-decoration:underline;} + h2{font-size:22px;} + h3{font-size:18px;text-decoration:underline;margin-top:36px;} + + p{margin:6px 0 12px;} + ul{margin:6px 0 12px 24px;} + li{margin:4px 0;} + hr{margin:24px 0;border:none;border-top:1px solid var(--hr-color);} + pre,code{font-family:var(--font-code);color:var(--accent-color);white-space:pre-wrap;margin:12px 0;} + + .blue{color:var(--accent-color);} + .red{color:#f00;} + .maroon{color:#800000;} + .underline{text-decoration:underline;} + + .toc-container{ + position:fixed;top:0;left:0;width:240px;height:100vh;overflow-y:auto; + background:var(--bg-color);border-right:1px solid var(--hr-color); + padding:20px 10px;font-family:var(--font-main); + } + .toc-section-title{text-align:center;margin:10px 0 8px;font-weight:bold;} + .toc-link{display:block;text-align:center;margin-bottom:6px; + color:var(--link-color);text-decoration:none;} + .toc-link:hover{text-decoration:underline;} + .toc-link.active{font-weight:700;background:var(--accent-color);color:#fff;border-radius:4px;} + + .control-panel{ + position:fixed;top:10px;right:20px;z-index:1000; + display:flex;flex-direction:column;align-items:center;gap:8px; + background:var(--bg-color);padding:10px 14px; + border:1px solid var(--hr-color);border-radius:6px; + box-shadow:0 2px 6px rgba(0,0,0,.08); + } + .theme-toggle,.font-select{ + background:var(--bg-color);color:var(--text-color); + border:1px solid var(--hr-color);border-radius:4px; + font-family:var(--font-main);transition:background .3s,color .3s; + } + .theme-toggle{padding:6px 12px;cursor:pointer;} + .font-select{padding:6px 8px;} + .back-to-top{text-align:right;margin-top:16px;} + + /* details-аккордеоны */ + details summary{cursor:pointer;font-weight:bold;margin-bottom:6px;} + details[open]>summary::after{content:" ▲";float:right;} + details>summary::after{content:" ▼";float:right;} + +
+ +
+ +

Table of contents

1. General scan information @@ -562,6 +580,128 @@

Created using DPULSE software } } }); + +function closeSplitScreen() { + document.getElementById('splitScreen').style.display = 'none'; + document.body.style.overflow = ''; +} + +function syncScroll(el1, el2) { + let ignore = false; + el1.addEventListener('scroll', function() { + if (ignore) return; ignore = true; + el2.scrollTop = el1.scrollTop; + el2.scrollLeft = el1.scrollLeft; + ignore = false; + }); + el2.addEventListener('scroll', function() { + if (ignore) return; ignore = true; + el1.scrollTop = el2.scrollTop; + el1.scrollLeft = el2.scrollLeft; + ignore = false; + }); +} + +document.getElementById('compareFile').addEventListener('change', function(e){ + const file = e.target.files[0]; + if (!file) return; + const reader = new FileReader(); + reader.onload = function(ev){ + let parser = new DOMParser(); + let rightDoc = parser.parseFromString(ev.target.result, "text/html"); + let leftDoc = document.cloneNode(true); + document.getElementById('leftReport').innerHTML = ''; + document.getElementById('rightReport').innerHTML = ''; + let leftBody = leftDoc.body.cloneNode(true); + let rightBody = rightDoc.body.cloneNode(true); + leftBody.querySelectorAll('#splitScreen, .control-panel').forEach(e=>e.remove()); + rightBody.querySelectorAll('#splitScreen, .control-panel').forEach(e=>e.remove()); + document.getElementById('leftReport').appendChild(leftBody); + document.getElementById('rightReport').appendChild(rightBody); + compareReports(leftBody, rightBody); + document.getElementById('splitScreen').style.display = 'block'; + document.body.style.overflow = 'hidden'; + syncScroll(document.getElementById('leftReport'), document.getElementById('rightReport')); + }; + reader.readAsText(file); +}); + +function compareLists(leftParent, rightParent) { + let leftLists = leftParent.querySelectorAll('ul'); + let rightLists = rightParent.querySelectorAll('ul'); + for (let i=0; ili.textContent.trim()); + let rItems = Array.from(r.querySelectorAll('li')).map(li=>li.textContent.trim()); + l.querySelectorAll('li').forEach(li=>{ + if (!rItems.includes(li.textContent.trim())) li.style.background = '#d4ffd4'; + }); + r.querySelectorAll('li').forEach(li=>{ + if (!lItems.includes(li.textContent.trim())) li.style.background = '#ffd4d4'; + }); + } +} + +function compareNums(leftParent, rightParent) { + let leftSpans = leftParent.querySelectorAll('span[id]'); + let rightSpans = rightParent.querySelectorAll('span[id]'); + for (let i=0; is.id===l.id); + if (r) { + if (l.textContent.trim() !== r.textContent.trim()) { + l.style.background = '#fff7b2'; + r.style.background = '#fff7b2'; + } + } else { + l.style.background = '#d4ffd4'; + } + } + rightSpans.forEach(r=>{ + if (!leftParent.querySelector('span[id="'+r.id+'"]')) { + r.style.background = '#ffd4d4'; + } + }); +} + +function comparePreBlocks(leftParent, rightParent) { + let leftPres = leftParent.querySelectorAll('details > pre'); + let rightPres = rightParent.querySelectorAll('details > pre'); + for (let i=0; i{ + let el = document.getElementById(id); + el.querySelectorAll('li,span[id],pre').forEach(node=>{ + let bg = node.style.background; + if (showDiff && (!bg || bg==='')) node.style.display = 'none'; + else node.style.display = ''; + }); + }); + } +}); From 97bb1c494fa049cd29103cf172812a395acc5560 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 2 Jun 2025 02:08:39 +0300 Subject: [PATCH 33/45] Cleaned-up imports --- dorking/dorking_handler.py | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/dorking/dorking_handler.py b/dorking/dorking_handler.py index b3f3eb4..967a61d 100644 --- a/dorking/dorking_handler.py +++ b/dorking/dorking_handler.py @@ -1,29 +1,18 @@ import sys -from random import random - -sys.path.append('service') -from logs_processing import logging -from ua_rotator import user_agent_rotator -from proxies_rotator import proxies_rotator - import random +import time +import os import logging +from colorama import Fore, Style import undetected_chromedriver as uc from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys -from config_processing import read_config -try: - import requests.exceptions - from colorama import Fore, Style - import re - import requests - import sqlite3 - import time - import os -except ImportError as e: - print(Fore.RED + "Import error appeared. Reason: {}".format(e) + Style.RESET_ALL) - sys.exit() +sys.path.append('service') +from logs_processing import logging +from ua_rotator import user_agent_rotator +from proxies_rotator import proxies_rotator +from config_processing import read_config def proxy_transfer(): proxy_flag, proxies_list = proxies_rotator.get_proxies() From ce3d5985fc3edd0796d23731ba6f5427d469e040 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 2 Jun 2025 02:12:55 +0300 Subject: [PATCH 34/45] Cleaned-up imports --- reporting_modules/html_report_creation.py | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/reporting_modules/html_report_creation.py b/reporting_modules/html_report_creation.py index c76440a..1dce4ff 100644 --- a/reporting_modules/html_report_creation.py +++ b/reporting_modules/html_report_creation.py @@ -1,4 +1,7 @@ import sys +import os +from jinja2 import Environment, FileSystemLoader +from colorama import Fore, Style sys.path.append('service') sys.path.append('service//pdf_report_templates') @@ -12,17 +15,6 @@ from api_securitytrails import securitytrails_html_prep from config_processing import read_config -try: - from datetime import datetime - from jinja2 import Environment, FileSystemLoader - import os - from colorama import Fore, Style - import sqlite3 - import re -except ImportError as e: - print(Fore.RED + "Import error appeared. Reason: {}".format(e) + Style.RESET_ALL) - sys.exit() - def generate_report(data, output_file, template_path): env = Environment(loader=FileSystemLoader('.')) template = env.get_template(template_path) From da94fe751bd01eac9a60aa41af1f1328eefab4f3 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 2 Jun 2025 02:14:57 +0300 Subject: [PATCH 35/45] Bumped version & cleaned imports --- pyproject.toml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 1ba2dc0..01367ac 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "dpulse" -version = "1.3" +version = "1.3.1" description = "Convenient,fast and user-friendly collector of domain information from Open-Sources" authors = ["OSINT-TECHNOLOGIES "] readme = "README.md" @@ -29,7 +29,6 @@ python-whois = "0.9.4" colorama = "0.4.6" pyfiglet = "1.0.2" rich = "13.7.1" -MechanicalSoup = "1.3.0" builtwith = "1.3.4" dnspython = "2.6.1" openpyxl = "3.1.2" From 8a481ada59002e8e5319ee6aff4892fea15ec47c Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 2 Jun 2025 02:15:22 +0300 Subject: [PATCH 36/45] Update poetry.lock --- poetry.lock | 225 ++++------------------------------------------------ 1 file changed, 14 insertions(+), 211 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0871fe5..adedada 100644 --- a/poetry.lock +++ b/poetry.lock @@ -250,14 +250,14 @@ files = [ [[package]] name = "click" -version = "8.1.8" +version = "8.2.1" description = "Composable command line interface toolkit" optional = false -python-versions = ">=3.7" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, - {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, + {file = "click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b"}, + {file = "click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202"}, ] [package.dependencies] @@ -343,17 +343,20 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.2.2" +version = "1.3.0" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" groups = ["main"] markers = "python_version < \"3.11\"" files = [ - {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, - {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, + {file = "exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10"}, + {file = "exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88"}, ] +[package.dependencies] +typing-extensions = {version = ">=4.6.0", markers = "python_version < \"3.13\""} + [package.extras] test = ["pytest (>=6)"] @@ -402,152 +405,6 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] -[[package]] -name = "lxml" -version = "5.4.0" -description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." -optional = false -python-versions = ">=3.6" -groups = ["main"] -files = [ - {file = "lxml-5.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e7bc6df34d42322c5289e37e9971d6ed114e3776b45fa879f734bded9d1fea9c"}, - {file = "lxml-5.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6854f8bd8a1536f8a1d9a3655e6354faa6406621cf857dc27b681b69860645c7"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:696ea9e87442467819ac22394ca36cb3d01848dad1be6fac3fb612d3bd5a12cf"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ef80aeac414f33c24b3815ecd560cee272786c3adfa5f31316d8b349bfade28"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b9c2754cef6963f3408ab381ea55f47dabc6f78f4b8ebb0f0b25cf1ac1f7609"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7a62cc23d754bb449d63ff35334acc9f5c02e6dae830d78dab4dd12b78a524f4"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f82125bc7203c5ae8633a7d5d20bcfdff0ba33e436e4ab0abc026a53a8960b7"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:b67319b4aef1a6c56576ff544b67a2a6fbd7eaee485b241cabf53115e8908b8f"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:a8ef956fce64c8551221f395ba21d0724fed6b9b6242ca4f2f7beb4ce2f41997"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:0a01ce7d8479dce84fc03324e3b0c9c90b1ece9a9bb6a1b6c9025e7e4520e78c"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:91505d3ddebf268bb1588eb0f63821f738d20e1e7f05d3c647a5ca900288760b"}, - {file = "lxml-5.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a3bcdde35d82ff385f4ede021df801b5c4a5bcdfb61ea87caabcebfc4945dc1b"}, - {file = "lxml-5.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:aea7c06667b987787c7d1f5e1dfcd70419b711cdb47d6b4bb4ad4b76777a0563"}, - {file = "lxml-5.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:a7fb111eef4d05909b82152721a59c1b14d0f365e2be4c742a473c5d7372f4f5"}, - {file = "lxml-5.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:43d549b876ce64aa18b2328faff70f5877f8c6dede415f80a2f799d31644d776"}, - {file = "lxml-5.4.0-cp310-cp310-win32.whl", hash = "sha256:75133890e40d229d6c5837b0312abbe5bac1c342452cf0e12523477cd3aa21e7"}, - {file = "lxml-5.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:de5b4e1088523e2b6f730d0509a9a813355b7f5659d70eb4f319c76beea2e250"}, - {file = "lxml-5.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:98a3912194c079ef37e716ed228ae0dcb960992100461b704aea4e93af6b0bb9"}, - {file = "lxml-5.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0ea0252b51d296a75f6118ed0d8696888e7403408ad42345d7dfd0d1e93309a7"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b92b69441d1bd39f4940f9eadfa417a25862242ca2c396b406f9272ef09cdcaa"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20e16c08254b9b6466526bc1828d9370ee6c0d60a4b64836bc3ac2917d1e16df"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7605c1c32c3d6e8c990dd28a0970a3cbbf1429d5b92279e37fda05fb0c92190e"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ecf4c4b83f1ab3d5a7ace10bafcb6f11df6156857a3c418244cef41ca9fa3e44"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cef4feae82709eed352cd7e97ae062ef6ae9c7b5dbe3663f104cd2c0e8d94ba"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:df53330a3bff250f10472ce96a9af28628ff1f4efc51ccba351a8820bca2a8ba"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:aefe1a7cb852fa61150fcb21a8c8fcea7b58c4cb11fbe59c97a0a4b31cae3c8c"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:ef5a7178fcc73b7d8c07229e89f8eb45b2908a9238eb90dcfc46571ccf0383b8"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d2ed1b3cb9ff1c10e6e8b00941bb2e5bb568b307bfc6b17dffbbe8be5eecba86"}, - {file = "lxml-5.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:72ac9762a9f8ce74c9eed4a4e74306f2f18613a6b71fa065495a67ac227b3056"}, - {file = "lxml-5.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f5cb182f6396706dc6cc1896dd02b1c889d644c081b0cdec38747573db88a7d7"}, - {file = "lxml-5.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:3a3178b4873df8ef9457a4875703488eb1622632a9cee6d76464b60e90adbfcd"}, - {file = "lxml-5.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e094ec83694b59d263802ed03a8384594fcce477ce484b0cbcd0008a211ca751"}, - {file = "lxml-5.4.0-cp311-cp311-win32.whl", hash = "sha256:4329422de653cdb2b72afa39b0aa04252fca9071550044904b2e7036d9d97fe4"}, - {file = "lxml-5.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:fd3be6481ef54b8cfd0e1e953323b7aa9d9789b94842d0e5b142ef4bb7999539"}, - {file = "lxml-5.4.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b5aff6f3e818e6bdbbb38e5967520f174b18f539c2b9de867b1e7fde6f8d95a4"}, - {file = "lxml-5.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942a5d73f739ad7c452bf739a62a0f83e2578afd6b8e5406308731f4ce78b16d"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:460508a4b07364d6abf53acaa0a90b6d370fafde5693ef37602566613a9b0779"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:529024ab3a505fed78fe3cc5ddc079464e709f6c892733e3f5842007cec8ac6e"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ca56ebc2c474e8f3d5761debfd9283b8b18c76c4fc0967b74aeafba1f5647f9"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a81e1196f0a5b4167a8dafe3a66aa67c4addac1b22dc47947abd5d5c7a3f24b5"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00b8686694423ddae324cf614e1b9659c2edb754de617703c3d29ff568448df5"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:c5681160758d3f6ac5b4fea370495c48aac0989d6a0f01bb9a72ad8ef5ab75c4"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:2dc191e60425ad70e75a68c9fd90ab284df64d9cd410ba8d2b641c0c45bc006e"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:67f779374c6b9753ae0a0195a892a1c234ce8416e4448fe1e9f34746482070a7"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:79d5bfa9c1b455336f52343130b2067164040604e41f6dc4d8313867ed540079"}, - {file = "lxml-5.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3d3c30ba1c9b48c68489dc1829a6eede9873f52edca1dda900066542528d6b20"}, - {file = "lxml-5.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1af80c6316ae68aded77e91cd9d80648f7dd40406cef73df841aa3c36f6907c8"}, - {file = "lxml-5.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4d885698f5019abe0de3d352caf9466d5de2baded00a06ef3f1216c1a58ae78f"}, - {file = "lxml-5.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea53d51859b6c64e7c51d522c03cc2c48b9b5d6172126854cc7f01aa11f52bc"}, - {file = "lxml-5.4.0-cp312-cp312-win32.whl", hash = "sha256:d90b729fd2732df28130c064aac9bb8aff14ba20baa4aee7bd0795ff1187545f"}, - {file = "lxml-5.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1dc4ca99e89c335a7ed47d38964abcb36c5910790f9bd106f2a8fa2ee0b909d2"}, - {file = "lxml-5.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:773e27b62920199c6197130632c18fb7ead3257fce1ffb7d286912e56ddb79e0"}, - {file = "lxml-5.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ce9c671845de9699904b1e9df95acfe8dfc183f2310f163cdaa91a3535af95de"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9454b8d8200ec99a224df8854786262b1bd6461f4280064c807303c642c05e76"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cccd007d5c95279e529c146d095f1d39ac05139de26c098166c4beb9374b0f4d"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0fce1294a0497edb034cb416ad3e77ecc89b313cff7adbee5334e4dc0d11f422"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:24974f774f3a78ac12b95e3a20ef0931795ff04dbb16db81a90c37f589819551"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:497cab4d8254c2a90bf988f162ace2ddbfdd806fce3bda3f581b9d24c852e03c"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:e794f698ae4c5084414efea0f5cc9f4ac562ec02d66e1484ff822ef97c2cadff"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:2c62891b1ea3094bb12097822b3d44b93fc6c325f2043c4d2736a8ff09e65f60"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:142accb3e4d1edae4b392bd165a9abdee8a3c432a2cca193df995bc3886249c8"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1a42b3a19346e5601d1b8296ff6ef3d76038058f311902edd574461e9c036982"}, - {file = "lxml-5.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4291d3c409a17febf817259cb37bc62cb7eb398bcc95c1356947e2871911ae61"}, - {file = "lxml-5.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4f5322cf38fe0e21c2d73901abf68e6329dc02a4994e483adbcf92b568a09a54"}, - {file = "lxml-5.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:0be91891bdb06ebe65122aa6bf3fc94489960cf7e03033c6f83a90863b23c58b"}, - {file = "lxml-5.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:15a665ad90054a3d4f397bc40f73948d48e36e4c09f9bcffc7d90c87410e478a"}, - {file = "lxml-5.4.0-cp313-cp313-win32.whl", hash = "sha256:d5663bc1b471c79f5c833cffbc9b87d7bf13f87e055a5c86c363ccd2348d7e82"}, - {file = "lxml-5.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:bcb7a1096b4b6b24ce1ac24d4942ad98f983cd3810f9711bcd0293f43a9d8b9f"}, - {file = "lxml-5.4.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:7be701c24e7f843e6788353c055d806e8bd8466b52907bafe5d13ec6a6dbaecd"}, - {file = "lxml-5.4.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb54f7c6bafaa808f27166569b1511fc42701a7713858dddc08afdde9746849e"}, - {file = "lxml-5.4.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97dac543661e84a284502e0cf8a67b5c711b0ad5fb661d1bd505c02f8cf716d7"}, - {file = "lxml-5.4.0-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:c70e93fba207106cb16bf852e421c37bbded92acd5964390aad07cb50d60f5cf"}, - {file = "lxml-5.4.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9c886b481aefdf818ad44846145f6eaf373a20d200b5ce1a5c8e1bc2d8745410"}, - {file = "lxml-5.4.0-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:fa0e294046de09acd6146be0ed6727d1f42ded4ce3ea1e9a19c11b6774eea27c"}, - {file = "lxml-5.4.0-cp36-cp36m-win32.whl", hash = "sha256:61c7bbf432f09ee44b1ccaa24896d21075e533cd01477966a5ff5a71d88b2f56"}, - {file = "lxml-5.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7ce1a171ec325192c6a636b64c94418e71a1964f56d002cc28122fceff0b6121"}, - {file = "lxml-5.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:795f61bcaf8770e1b37eec24edf9771b307df3af74d1d6f27d812e15a9ff3872"}, - {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29f451a4b614a7b5b6c2e043d7b64a15bd8304d7e767055e8ab68387a8cacf4e"}, - {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4aa412a82e460571fad592d0f93ce9935a20090029ba08eca05c614f99b0cc92"}, - {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:c5d32f5284012deaccd37da1e2cd42f081feaa76981f0eaa474351b68df813c5"}, - {file = "lxml-5.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:31e63621e073e04697c1b2d23fcb89991790eef370ec37ce4d5d469f40924ed6"}, - {file = "lxml-5.4.0-cp37-cp37m-win32.whl", hash = "sha256:be2ba4c3c5b7900246a8f866580700ef0d538f2ca32535e991027bdaba944063"}, - {file = "lxml-5.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:09846782b1ef650b321484ad429217f5154da4d6e786636c38e434fa32e94e49"}, - {file = "lxml-5.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eaf24066ad0b30917186420d51e2e3edf4b0e2ea68d8cd885b14dc8afdcf6556"}, - {file = "lxml-5.4.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b31a3a77501d86d8ade128abb01082724c0dfd9524f542f2f07d693c9f1175f"}, - {file = "lxml-5.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e108352e203c7afd0eb91d782582f00a0b16a948d204d4dec8565024fafeea5"}, - {file = "lxml-5.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a11a96c3b3f7551c8a8109aa65e8594e551d5a84c76bf950da33d0fb6dfafab7"}, - {file = "lxml-5.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:ca755eebf0d9e62d6cb013f1261e510317a41bf4650f22963474a663fdfe02aa"}, - {file = "lxml-5.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:4cd915c0fb1bed47b5e6d6edd424ac25856252f09120e3e8ba5154b6b921860e"}, - {file = "lxml-5.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:226046e386556a45ebc787871d6d2467b32c37ce76c2680f5c608e25823ffc84"}, - {file = "lxml-5.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:b108134b9667bcd71236c5a02aad5ddd073e372fb5d48ea74853e009fe38acb6"}, - {file = "lxml-5.4.0-cp38-cp38-win32.whl", hash = "sha256:1320091caa89805df7dcb9e908add28166113dcd062590668514dbd510798c88"}, - {file = "lxml-5.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:073eb6dcdf1f587d9b88c8c93528b57eccda40209cf9be549d469b942b41d70b"}, - {file = "lxml-5.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bda3ea44c39eb74e2488297bb39d47186ed01342f0022c8ff407c250ac3f498e"}, - {file = "lxml-5.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9ceaf423b50ecfc23ca00b7f50b64baba85fb3fb91c53e2c9d00bc86150c7e40"}, - {file = "lxml-5.4.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:664cdc733bc87449fe781dbb1f309090966c11cc0c0cd7b84af956a02a8a4729"}, - {file = "lxml-5.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67ed8a40665b84d161bae3181aa2763beea3747f748bca5874b4af4d75998f87"}, - {file = "lxml-5.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b4a3bd174cc9cdaa1afbc4620c049038b441d6ba07629d89a83b408e54c35cd"}, - {file = "lxml-5.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:b0989737a3ba6cf2a16efb857fb0dfa20bc5c542737fddb6d893fde48be45433"}, - {file = "lxml-5.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:dc0af80267edc68adf85f2a5d9be1cdf062f973db6790c1d065e45025fa26140"}, - {file = "lxml-5.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:639978bccb04c42677db43c79bdaa23785dc7f9b83bfd87570da8207872f1ce5"}, - {file = "lxml-5.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a99d86351f9c15e4a901fc56404b485b1462039db59288b203f8c629260a142"}, - {file = "lxml-5.4.0-cp39-cp39-win32.whl", hash = "sha256:3e6d5557989cdc3ebb5302bbdc42b439733a841891762ded9514e74f60319ad6"}, - {file = "lxml-5.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:a8c9b7f16b63e65bbba889acb436a1034a82d34fa09752d754f88d708eca80e1"}, - {file = "lxml-5.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1b717b00a71b901b4667226bba282dd462c42ccf618ade12f9ba3674e1fabc55"}, - {file = "lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27a9ded0f0b52098ff89dd4c418325b987feed2ea5cc86e8860b0f844285d740"}, - {file = "lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b7ce10634113651d6f383aa712a194179dcd496bd8c41e191cec2099fa09de5"}, - {file = "lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:53370c26500d22b45182f98847243efb518d268374a9570409d2e2276232fd37"}, - {file = "lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c6364038c519dffdbe07e3cf42e6a7f8b90c275d4d1617a69bb59734c1a2d571"}, - {file = "lxml-5.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b12cb6527599808ada9eb2cd6e0e7d3d8f13fe7bbb01c6311255a15ded4c7ab4"}, - {file = "lxml-5.4.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5f11a1526ebd0dee85e7b1e39e39a0cc0d9d03fb527f56d8457f6df48a10dc0c"}, - {file = "lxml-5.4.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48b4afaf38bf79109bb060d9016fad014a9a48fb244e11b94f74ae366a64d252"}, - {file = "lxml-5.4.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de6f6bb8a7840c7bf216fb83eec4e2f79f7325eca8858167b68708b929ab2172"}, - {file = "lxml-5.4.0-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5cca36a194a4eb4e2ed6be36923d3cffd03dcdf477515dea687185506583d4c9"}, - {file = "lxml-5.4.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b7c86884ad23d61b025989d99bfdd92a7351de956e01c61307cb87035960bcb1"}, - {file = "lxml-5.4.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:53d9469ab5460402c19553b56c3648746774ecd0681b1b27ea74d5d8a3ef5590"}, - {file = "lxml-5.4.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:56dbdbab0551532bb26c19c914848d7251d73edb507c3079d6805fa8bba5b706"}, - {file = "lxml-5.4.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14479c2ad1cb08b62bb941ba8e0e05938524ee3c3114644df905d2331c76cd57"}, - {file = "lxml-5.4.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32697d2ea994e0db19c1df9e40275ffe84973e4232b5c274f47e7c1ec9763cdd"}, - {file = "lxml-5.4.0-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:24f6df5f24fc3385f622c0c9d63fe34604893bc1a5bdbb2dbf5870f85f9a404a"}, - {file = "lxml-5.4.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:151d6c40bc9db11e960619d2bf2ec5829f0aaffb10b41dcf6ad2ce0f3c0b2325"}, - {file = "lxml-5.4.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4025bf2884ac4370a3243c5aa8d66d3cb9e15d3ddd0af2d796eccc5f0244390e"}, - {file = "lxml-5.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9459e6892f59ecea2e2584ee1058f5d8f629446eab52ba2305ae13a32a059530"}, - {file = "lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47fb24cc0f052f0576ea382872b3fc7e1f7e3028e53299ea751839418ade92a6"}, - {file = "lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50441c9de951a153c698b9b99992e806b71c1f36d14b154592580ff4a9d0d877"}, - {file = "lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:ab339536aa798b1e17750733663d272038bf28069761d5be57cb4a9b0137b4f8"}, - {file = "lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9776af1aad5a4b4a1317242ee2bea51da54b2a7b7b48674be736d463c999f37d"}, - {file = "lxml-5.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:63e7968ff83da2eb6fdda967483a7a023aa497d85ad8f05c3ad9b1f2e8c84987"}, - {file = "lxml-5.4.0.tar.gz", hash = "sha256:d12832e1dbea4be280b22fd0ea7c9b87f0d8fc51ba06e92dc62d52f804f78ebd"}, -] - -[package.extras] -cssselect = ["cssselect (>=0.7)"] -html-clean = ["lxml_html_clean"] -html5 = ["html5lib"] -htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=3.0.11,<3.1.0)"] - [[package]] name = "markdown-it-py" version = "3.0.0" @@ -656,23 +513,6 @@ files = [ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] -[[package]] -name = "mechanicalsoup" -version = "1.3.0" -description = "A Python library for automating interaction with websites" -optional = false -python-versions = ">=3.6" -groups = ["main"] -files = [ - {file = "MechanicalSoup-1.3.0-py3-none-any.whl", hash = "sha256:83dfc23bbbcaafb62dd43e0f12aee3202e780650b4612d999b54324558980114"}, - {file = "MechanicalSoup-1.3.0.tar.gz", hash = "sha256:38e8748f62fd9455a0818701a9e2dbfa549639d09f829f3fdd03665c825e7ce1"}, -] - -[package.dependencies] -beautifulsoup4 = ">=4.7" -lxml = "*" -requests = ">=2.22.0" - [[package]] name = "openpyxl" version = "3.1.2" @@ -904,19 +744,18 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "requirements-parser" -version = "0.11.0" +version = "0.13.0" description = "This is a small Python module for parsing Pip requirement files." optional = false python-versions = "<4.0,>=3.8" groups = ["dev"] files = [ - {file = "requirements_parser-0.11.0-py3-none-any.whl", hash = "sha256:50379eb50311834386c2568263ae5225d7b9d0867fb55cf4ecc93959de2c2684"}, - {file = "requirements_parser-0.11.0.tar.gz", hash = "sha256:35f36dc969d14830bf459803da84f314dc3d17c802592e9e970f63d0359e5920"}, + {file = "requirements_parser-0.13.0-py3-none-any.whl", hash = "sha256:2b3173faecf19ec5501971b7222d38f04cb45bb9d87d0ad629ca71e2e62ded14"}, + {file = "requirements_parser-0.13.0.tar.gz", hash = "sha256:0843119ca2cb2331de4eb31b10d70462e39ace698fd660a915c247d2301a4418"}, ] [package.dependencies] packaging = ">=23.2" -types-setuptools = ">=69.1.0" [[package]] name = "rich" @@ -957,27 +796,6 @@ typing_extensions = ">=4.9,<5.0" urllib3 = {version = ">=1.26,<3", extras = ["socks"]} websocket-client = ">=1.8,<2.0" -[[package]] -name = "setuptools" -version = "80.3.0" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "setuptools-80.3.0-py3-none-any.whl", hash = "sha256:a65cffc4fb86167e3020b3ef58e08226baad8b29a3b34ce2c9d07e901bac481d"}, - {file = "setuptools-80.3.0.tar.gz", hash = "sha256:ec8308eb180b2312062b1c5523204acf872cd8b0a9e6c2ae76431b22bc4065d7"}, -] - -[package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.8.0) ; sys_platform != \"cygwin\""] -core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] -enabler = ["pytest-enabler (>=2.2)"] -test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] -type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"] - [[package]] name = "six" version = "1.17.0" @@ -1108,21 +926,6 @@ outcome = ">=1.2.0" trio = ">=0.11" wsproto = ">=0.14" -[[package]] -name = "types-setuptools" -version = "80.1.0.20250503" -description = "Typing stubs for setuptools" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "types_setuptools-80.1.0.20250503-py3-none-any.whl", hash = "sha256:b25bcbfeebae06bc4d2d09231b0c0622e95bdbb36df070cfe40b925fcef97dd3"}, - {file = "types_setuptools-80.1.0.20250503.tar.gz", hash = "sha256:3cbdbe42c12e1d9179e6e87644a2cf176259411b5a3cc1d0fb0d824dc711d9ed"}, -] - -[package.dependencies] -setuptools = "*" - [[package]] name = "typing-extensions" version = "4.13.2" @@ -1208,4 +1011,4 @@ h11 = ">=0.9.0,<1" [metadata] lock-version = "2.1" python-versions = ">=3.10,<3.13" -content-hash = "da8180404107284630cbcc7ddf3bbc27e8cd964a2d8e91aba64920288ce55358" +content-hash = "a304f88206c147450a2db32c13006dfe76c697614c65f973ab3ab3145401aaf9" From 02dfc59b73df61ce1cfbf6d7a2491f62f5273333 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 2 Jun 2025 02:20:49 +0300 Subject: [PATCH 37/45] Cleaned-up imports --- datagather_modules/data_assembler.py | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/datagather_modules/data_assembler.py b/datagather_modules/data_assembler.py index bf35ad2..74313ca 100644 --- a/datagather_modules/data_assembler.py +++ b/datagather_modules/data_assembler.py @@ -1,34 +1,24 @@ import sys -sys.path.append('service') -sys.path.append('pagesearch') -sys.path.append('dorking') -sys.path.append('snapshotting') +from datetime import datetime +import os +from colorama import Fore, Style +sys.path.extend(['service', 'pagesearch', 'dorking', 'snapshotting']) + +from logs_processing import logging +from config_processing import read_config +from db_creator import get_dorking_query import crawl_processor as cp import dorking_handler as dp import networking_processor as np from pagesearch_parsers import subdomains_parser -from logs_processing import logging from api_virustotal import api_virustotal_check from api_securitytrails import api_securitytrails_check from api_hudsonrock import api_hudsonrock_check -from db_creator import get_dorking_query from screen_snapshotting import take_screenshot -from config_processing import read_config from html_snapshotting import save_page_as_html from archive_snapshotting import download_snapshot -try: - import requests - from datetime import datetime - import os - from colorama import Fore, Style - import sqlite3 - import configparser -except ImportError as e: - print(Fore.RED + "Import error appeared. Reason: {}".format(e) + Style.RESET_ALL) - sys.exit() - def establishing_dork_db_connection(dorking_flag): dorking_db_paths = { 'basic': 'dorking//basic_dorking.db', From 8dddc96e10f8889015d8dddbc06d4ab7058b5531 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Mon, 2 Jun 2025 02:25:38 +0300 Subject: [PATCH 38/45] Cleaned-up imports --- datagather_modules/crawl_processor.py | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/datagather_modules/crawl_processor.py b/datagather_modules/crawl_processor.py index b0930ed..d47aa11 100644 --- a/datagather_modules/crawl_processor.py +++ b/datagather_modules/crawl_processor.py @@ -1,22 +1,17 @@ import sys +import socket +import re +import urllib +from collections import defaultdict +from urllib.parse import urlparse +import whois +import requests +from bs4 import BeautifulSoup +from colorama import Fore, Style + sys.path.append('service') from logs_processing import logging -try: - import socket - import whois - import re - import requests - import urllib.parse - from colorama import Fore, Style - from urllib.parse import urlparse - from collections import defaultdict - from bs4 import BeautifulSoup - import random -except ImportError as e: - print(Fore.RED + "Import error appeared. Reason: {}".format(e) + Style.RESET_ALL) - sys.exit() - def ip_gather(short_domain): ip_address = socket.gethostbyname(short_domain) return ip_address From a7ea4b8629a774bafd57f4b687c065e957de4470 Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Thu, 12 Jun 2025 20:36:43 +0300 Subject: [PATCH 39/45] Added "Show/Hide ToC" button --- .../modern_report_template.html | 76 +++++++++++++++++-- 1 file changed, 71 insertions(+), 5 deletions(-) diff --git a/service/pdf_report_templates/modern_report_template.html b/service/pdf_report_templates/modern_report_template.html index b900e92..0c90b85 100644 --- a/service/pdf_report_templates/modern_report_template.html +++ b/service/pdf_report_templates/modern_report_template.html @@ -53,10 +53,57 @@ .maroon{color:#800000;} .underline{text-decoration:underline;} - .toc-container{ - position:fixed;top:0;left:0;width:240px;height:100vh;overflow-y:auto; - background:var(--bg-color);border-right:1px solid var(--hr-color); - padding:20px 10px;font-family:var(--font-main); + .toc-toggle { + position: absolute; + top: 10px; + right: 10px; + background: var(--bg-color); + border: 1px solid var(--hr-color); + border-radius: 4px; + padding: 4px 8px; + cursor: pointer; + color: var(--text-color); + font-family: var(--font-main); + width: 30px; + height: 30px; + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + } + + .toc-container { + position: fixed; + top: 0; + left: 0; + width: 240px; + height: 100vh; + overflow-y: auto; + background: var(--bg-color); + border-right: 1px solid var(--hr-color); + padding: 20px 10px; + font-family: var(--font-main); + transition: width 0.3s ease; + } + + .toc-container.collapsed { + width: 50px; + overflow: visible; + } + + .toc-container.collapsed .toc-section-title, + .toc-container.collapsed .toc-link, + .toc-container.collapsed h2 { + opacity: 0; + visibility: hidden; + position: absolute; + pointer-events: none; + } + + .toc-container.collapsed .toc-toggle { + right: -30px; + position: absolute; + top: 10px; } .toc-section-title{text-align:center;margin:10px 0 8px;font-weight:bold;} .toc-link{display:block;text-align:center;margin-bottom:6px; @@ -87,7 +134,6 @@ -
@@ -118,6 +164,7 @@
+

Table of contents

1. General scan information 2. General scan statistics @@ -515,6 +562,11 @@

Created using DPULSE software document.getElementById('fontSelect').value=saved; changeFont(saved); bindPrintPdf(); + const tocCollapsed = localStorage.getItem('tocCollapsed') === 'true'; + if (tocCollapsed) { + document.querySelector('.toc-container').classList.add('collapsed'); + document.body.style.paddingLeft = '60px'; + } if (window.Chart) { const stats = [ @@ -586,6 +638,20 @@

Created using DPULSE software document.body.style.overflow = ''; } +function toggleToc() { + const toc = document.querySelector('.toc-container'); + toc.classList.toggle('collapsed'); + + const body = document.body; + if (toc.classList.contains('collapsed')) { + body.style.paddingLeft = '60px'; + } else { + body.style.paddingLeft = '260px'; + } + + localStorage.setItem('tocCollapsed', toc.classList.contains('collapsed')); +} + function syncScroll(el1, el2) { let ignore = false; el1.addEventListener('scroll', function() { From 66298bbf9a4a4d96a2c9ccaedcb306efcd1fb24c Mon Sep 17 00:00:00 2001 From: OSINT-TECHNOLOGIES <77023667+OSINT-TECHNOLOGIES@users.noreply.github.com> Date: Fri, 13 Jun 2025 02:37:36 +0300 Subject: [PATCH 40/45] Added context help, progress bar, minimap and separate columns for listings --- .../modern_report_template.html | 467 ++++++++++++++---- 1 file changed, 364 insertions(+), 103 deletions(-) diff --git a/service/pdf_report_templates/modern_report_template.html b/service/pdf_report_templates/modern_report_template.html index 0c90b85..ca0962c 100644 --- a/service/pdf_report_templates/modern_report_template.html +++ b/service/pdf_report_templates/modern_report_template.html @@ -52,6 +52,57 @@ .red{color:#f00;} .maroon{color:#800000;} .underline{text-decoration:underline;} + + .progress-bar { + position: fixed; + top: 0; + left: 0; + width: 0; + height: 4px; + background: var(--accent-color); + z-index: 1001; + transition: width 0.2s; + } + + section { + transition: transform 0.3s, opacity 0.3s; + } + + section.active { + transform: translateX(10px); + border-left: 3px solid var(--accent-color); + padding-left: 10px; + } + + details { + margin: 10px 0; + padding: 10px; + border-radius: 4px; + border: 1px solid var(--hr-color); + transition: all 0.3s ease; + } + + details:hover { + box-shadow: 0 2px 8px rgba(0,0,0,0.1); + } + + details[open] { + background: var(--bg-color); + border-color: var(--accent-color); + } + + details > summary { + padding: 8px; + cursor: pointer; + user-select: none; + } + + details > pre { + margin-top: 10px; + padding: 15px; + border-radius: 4px; + background: rgba(0,0,0,0.03); + } .toc-toggle { position: absolute; @@ -85,6 +136,7 @@ font-family: var(--font-main); transition: width 0.3s ease; } + .toc-container.collapsed { width: 50px; @@ -111,6 +163,81 @@ .toc-link:hover{text-decoration:underline;} .toc-link.active{font-weight:700;background:var(--accent-color);color:#fff;border-radius:4px;} + .minimap { + position: fixed; + right: 20px; + top: 50%; + transform: translateY(-50%); + width: 30px; + height: 200px; + background: var(--bg-color); + border: 1px solid var(--hr-color); + border-radius: 15px; + z-index: 999; + opacity: 0.7; + transition: opacity 0.3s; + } + + .minimap:hover { + opacity: 1; + } + + .minimap-content { + position: absolute; + top: 5px; + left: 5px; + right: 5px; + bottom: 5px; + } + + .minimap-section { + position: absolute; + left: 0; + right: 0; + background: var(--accent-color); + border-radius: 2px; + } + + .minimap-slider { + position: absolute; + left: 0; + width: 100%; + height: 20px; + background: rgba(0,0,0,0.2); + border-radius: 10px; + cursor: pointer; + } + + .minimap.hidden { + display: none; + } + + .technical-term { + text-decoration: underline dotted; + cursor: help; + position: relative; + } + + .term-tooltip { + position: absolute; + bottom: 100%; + left: 50%; + transform: translateX(-50%); + background: var(--accent-color); + color: white; + padding: 8px 12px; + border-radius: 4px; + font-size: 14px; + white-space: nowrap; + z-index: 1000; + animation: fadeIn 0.3s; + } + + @keyframes fadeIn { + from { opacity: 0; transform: translateX(-50%) translateY(10px); } + to { opacity: 1; transform: translateX(-50%) translateY(0); } + } + .control-panel{ position:fixed;top:10px;right:20px;z-index:1000; display:flex;flex-direction:column;align-items:center;gap:8px; @@ -141,6 +268,7 @@

+
+
+ +
+
+
+
+