首页 > 编程语言 >【python脚本】批量获取攻防资产访问截图

【python脚本】批量获取攻防资产访问截图

时间:2024-09-11 09:37:02浏览次数:1  
标签:攻防 截图 python queue url file time import

项目地址

https://github.com/TFour123/screen_get

1.安装依赖 pip install selenium webdriver-manager tqdm

2.在py脚本所在文件夹下,创建targets.txt文件,运行脚本即可。

说明:

(1)该脚本旨在攻防中,批量的请求url,获取页面截图,以便初步判断脆弱资产。

(2)脚本运行后,会在py文件所在的文件夹下创建screenshots文件夹,并把截图保存到该文件夹下,最后会生成html文档,以便快速筛选可能脆弱的资产

运行截图:

脚本

import os
import re
import time
import random  # 导入 random 用于生成随机数
import concurrent.futures
from tqdm import tqdm  # 导入 tqdm 用于进度条
from queue import PriorityQueue  # 使用优先队列来根据响应时间优先处理
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager

# 初始化 Chrome 浏览器的设置
chrome_options = Options()
chrome_options.add_argument("--headless")  # 无头模式(不显示浏览器窗口)
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")


# 自动下载 ChromeDriver
def get_driver():
    return webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)


# 创建一个用于存储截图的文件夹
output_folder = "screenshots"
os.makedirs(output_folder, exist_ok=True)

# 创建 HTML 文件并写入初始内容
html_file = "screenshots_report.html"
with open(html_file, "w", encoding="utf-8") as f:
    f.write("<html><head><title>URL Screenshot Report</title></head><body>\n")
    f.write("<table border='1' cellpadding='10' cellspacing='0' style='border-collapse: collapse;'>\n")
    f.write("<tr><th>URL</th><th>Screenshot</th></tr>\n")  # 添加表格头部


# 使用随机数和时间戳生成唯一文件名
def generate_filename(url):
    timestamp = time.strftime("%Y%m%d-%H%M%S")
    random_number = random.randint(1000, 9999)  # 生成 1000 到 9999 的随机数
    file_name = f"screenshot_{random_number}_{timestamp}.png"
    return file_name


# 定义访问和截图的函数,并测量访问时间
def capture_screenshot(url, priority_queue):
    driver = get_driver()  # 每个线程单独初始化一个 driver
    start_time = time.time()
    try:
        driver.get(url)
        print(f"正在访问 {url}...")

        # 生成截图文件的名称
        file_name = generate_filename(url)
        file_path = os.path.join(output_folder, file_name)

        # 截图并保存到指定路径
        driver.save_screenshot(file_path)
        print(f"已保存截图:{file_path}")

        # 截图完成后立即写入 HTML 文件
        with open(html_file, "a", encoding="utf-8") as f:
            f.write(f"<tr><td>{url}</td><td><img src='{file_path}' width='300'></td></tr>\n")

        # 记录完成后的响应时间
        end_time = time.time()
        response_time = end_time - start_time
        priority_queue.put((response_time, url))  # 将 URL 和响应时间放入优先队列

        return (url, file_path)
    finally:
        driver.quit()


# 使用优先队列动态调整优先级
def prioritize_and_process_urls(urls):
    priority_queue = PriorityQueue()

    # 将初始 URL 放入优先队列,初始优先级为 0
    for url in urls:
        priority_queue.put((0, url))

    # 使用多线程加速访问和截图
    max_threads = 10
    with concurrent.futures.ThreadPoolExecutor(max_threads) as executor:
        futures = []
        progress = tqdm(total=len(urls), desc="Processing URLs")

        while not priority_queue.empty():
            # 获取优先级最高的 URL(即响应时间最短的)
            priority, url = priority_queue.get()

            # 提交任务并将优先队列传递给 capture_screenshot
            future = executor.submit(capture_screenshot, url, priority_queue)
            futures.append(future)

            # 更新进度条
            progress.update(1)

        # 等待所有任务完成
        concurrent.futures.wait(futures)
        progress.close()


# 从 targets.txt 文件中读取 URL 列表
with open("targets.txt", "r", encoding="utf-8") as f:
    urls = [line.strip() for line in f if line.strip()]  # 去除空行和多余空格

# 优先处理并开始截图
prioritize_and_process_urls(urls)

# 最后关闭 HTML 文件的标签
with open(html_file, "a", encoding="utf-8") as f:
    f.write("</table></body></html>\n")

print(f"报告已生成:{html_file}")

标签:攻防,截图,python,queue,url,file,time,import
From: https://www.cnblogs.com/o-O-oO/p/18407678

相关文章

  • Python中的class和__init__方法
    在Python编程中,class是一种面向对象编程的基本构建块,用于创建和管理具有特定属性和行为的实例。在Python中,我们通常是通过class关键字来定义一个类,并在其中定义类的属性和方法。然而,在一些特殊情况下,我们可能需要用到一种特殊的class,即不需要__init__方法的class。那么,什么是指定......
  • 如何用图表控件LightningChart Python实现检测应用?
    LightningChartPython是知名图表控件公司LightningChartLtd正在研发的Python图表,目前还未正式推出,感兴趣的朋友可以戳下方链接申请试用!立即申请LightningChartPython试用什么是结构健康监测(SHM)?结构健康监测(SHM)是指实施结构损伤检测策略的过程,SHM涉及使用传感器和......
  • Python之异常处理与程序调试(Exception Handling and Program Debugging in Python)
    ......
  • Python 之正则表达式(Regular Expressions in Python)
    ......
  • 帮助你高效编写 Python代码的策略和步骤
    程序员每天飞快的编写大量的Python代码是一个极具挑战性的目标,通常不推荐这样做,因为代码的质量、可维护性和可读性远比数量更为重要。然而,在某些特定情境下,如编程竞赛、快速原型开发等,你可能需要高效地编写大量代码。以下是一系列帮助你高效编码的策略和步骤:前期准备阶段明确......
  • Python 加密算法详解与应用
    引言随着互联网的普及,数据传输与存储中的安全性问题变得尤为重要。加密算法是一种有效保护数据的方法,广泛应用于文件加密、网络通信以及身份认证等场景中。Python作为一种易于上手且功能强大的编程语言,提供了多种加密库供开发者使用,如cryptography、pycryptodome等库。本篇文章将详......
  • Python在DevOps中的应用 - 提高自动化和效率的利器
    引言在当今快速发展的IT世界中,DevOps已成为提高软件开发和运维效率的关键方法。Python,作为一种多功能且易于学习的编程语言,在DevOps实践中扮演着越来越重要的角色。本文将深入探讨Python如何在DevOps中发挥作用,以及一些常用的Python库和工具,帮助您提高自动化程度和工作效率。作者:ht......
  • 【教程】如何使用 MYScrcpy,一行Python代码获取Android设备 屏幕/摄像头 H264/H265 原
    MYScrcpy1.5.8Github/Gitee1.5.8版本新增获取原始视频流(H264/H265)方法,供小伙伴们在需要原生H264/H265串流时使用要求MYScrcpy>1.5.8pipinstall-Umysc安卓设备开启调试模式,安卓版本>5(摄像头需>11)H265需安卓设备支持H265编码步骤MYScrcpy从设计之初......
  • Python Pyqt5 将ui文件转换成py文件
    命令行pyuicyour_ui_file.ui-ooutput_file.py如果是虚拟环境,则需要提前进入虚拟环境中执行pyuic命令uitopy文件的使用如果是ui文件转换过来的py文件,不要直接在此py文件中编写代码。如果你的ui文件发生变换就需要重新生成py文件,这个时候新的py文件就会覆盖历史的。正确使......
  • SciTech-Mathmatics-Probability+Statistics-Sampling : Learn Stats for Python III:
    LearnStatsforPythonIII:ProbabilityandSamplingBYIVÁNPALOMARESCARRASCOSAPOSTEDONSEPTEMBER9,2024ProbabilityandSamplingAboutPartIII:ProbabilityandSamplingPartIIIdivesintoappliedprobabilitytheory,concretelybymodelingdiscrete......