自制目录扫描工具并由py文件转为exe可执行程序

news2024/11/16 17:52:36

心血来潮让ChatGPT写了一个目录扫描工具,然后进行了一定的修改和完善,可以实现对网站目录的一个简单扫描并输出扫描结果,主要包括存在页面、重定向页面和禁止访问页面。

虽然代码很简单,但是做这个东西的过程还是挺有意思的,也从中学到了一些知识。

代码主要包括三个部分

(1)自定义函数:print_colored_mask_startup_screen()

该函数可以用来输出程序的一些用法和介绍,加了一些看起来酷酷的背景和字体。

(2)自定义函数:directory_scan(url, wordlist)

该函数用于实现扫描功能,接受参数url和wordlist。

(3)main()函数

除了用来调用前面定义的两个函数,main函数中的其它代码可以保证程序正常继续运行和关闭,以及对用户输入错误的提示和处理。

原本我最初的想法是使用 -u 和 -d 追加参数来指定目标url和爆破字典,但是后续转成exe程序后发现,由于没有指定参数会导致程序无法双击打开,只能在cmd中切换到程序所在位置,指定好参数后才能运行,于是修改成了双击打开直接输目标url和字典。

来看效果,首先跑一下py文件是否正常:

接下来我们把py文件转为exe可执行程序

需要先装一个库:pyinstaller

如果安装好之后执行报错可以参考我上一篇博客:http://t.csdnimg.cn/JeMEg

在pycharm终端执行命令:

pyinstaller --onefile --hidden-import=requests MySc.py 

hidden参数是确告诉PyInstaller包含requests库,否则生成的东西除了exe程序还会有一个_internal文件夹,该文件夹是requests库的内部文件夹,用于存储库的内部数据和模块,在许多情况下,这个文件夹会随着库的使用而生成,我们可以使用上面的参数确保requests库的相关代码被包括在生成的exe文件中,并且不会产生_internal文件夹。

成功生成exe程序

我们需要先在程序所在目录创建一个用于爆破的字典

双击打开运行程序,输入参数后成功实现了对网站目录扫描

接下来对可能出现的错误进行测试:包括输入错误的url或者不存在的字典路径或者没有输入的情况

可以看到程序会针对错误给出提示,并要求重新输入;

并且每次扫描结束我们也可以使用E命令或者C命令来控制是否继续下一次扫描。

原本想使用pyinstaller --onefile --icon来修改生成exe程序的图标,但是失败了,因为pyinstaller的--onefile选项允许生成一个单文件的可执行程序,但它通常不直接支持将图标嵌入到生成的可执行文件中,其实可以使用pywin32库中的pywin32ctypes模块来更改exe文件的图标,但是呢也没搞出来,后面我再看看。

下面附上py文件源码:

import requests

def print_colored_mask_startup_screen():
    colored_mask_art = """
    ██╗    ██╗ █████╗ ██████╗ ████████╗  M   M   Y   Y   OOO   N   N  ██████╗ ██╗   ██╗███╗   ██╗██╗   ██╗███████╗██╗     ██╗
    ██║    ██║██╔══██╗██╔══██╗╚══██╔══╝  MM MM    Y Y   O   O  NN  N  ██╔══██╗██║   ██║████╗  ██║██║   ██║██╔════╝██║     ██║ 
    ██║ █╗ ██║███████║██████╔╝   ██║     M M M     Y    O   O  N N N  ██████╔╝██║   ██║██╔██╗ ██║██║   ██║███████╗██║     ██║ 
    ██║███╗██║██╔══██║██╔══██╗   ██║     M   M     Y    O   O  N  NN  ██╔══██╗██║   ██║██║╚██╗██║██║   ██║╚════██║██║     ██║ 
    ╚███╔███╔╝██║  ██║██║  ██║   ██║     M   M     Y     OOO   N   N  ██████╔╝╚██████╔╝██║ ╚████║╚██████╔╝███████║███████╗███████╗
     ╚══╝╚══╝ ╚═╝  ╚═╝╚═╝  ╚═╝   ╚═╝                                  ╚═════╝  ╚═════╝ ╚═╝  ╚═══╝ ╚═════╝ ╚══════╝╚══════╝╚══════╝
    =================================
    Directory Scanner
    Version: 1.0
    Author: Myon
    =================================
    """
    # 使用ANSI转义码将文本颜色更改为红色
    colored_mask_art = "\033[31m" + colored_mask_art + "\033[0m"
    print(colored_mask_art)


def directory_scan(url, wordlist):
    found = []
    redirect = []
    forbidden = []
    not_found = []

    with open(wordlist, 'r') as file:
        for line in file:
            directory = line.strip()
            full_url = f"{url}/{directory}"
            response = requests.head(full_url)

            if response.status_code == 200:
                found.append(full_url)
            elif response.status_code == 301 or response.status_code == 302:
                redirect.append(full_url)
            elif response.status_code == 403 or response.status_code == 401:
                forbidden.append(full_url)
            elif response.status_code == 404:
                not_found.append(full_url)

    print("Found:")
    for url in found:
        print(f"{url}")

    print("\nRedirected:")
    for url in redirect:
        print(f"{url}")

    print("\nForbidden:")
    for url in forbidden:
        print(f"{url}")

    print("\nNot Found:")
    for url in not_found:
        print(f"{url}")


def main():
    while True:
        print_colored_mask_startup_screen()

        while True:
            url = input("Enter the target URL: ")
            dictionary = input("Enter the path to the wordlist file: ")

            if not url or not dictionary:
                print("Please enter the target URL and wordlist.")
                continue

            try:
                if not url.startswith(("http://", "https://")):
                    raise requests.exceptions.MissingSchema("Invalid URL format")
            except requests.exceptions.MissingSchema:
                print("URL format is invalid. Please enter a valid URL.")
                continue

            try:
                with open(dictionary, 'r'):
                    pass
            except FileNotFoundError:
                print("Dictionary file not found.")
                continue

            directory_scan(url, dictionary)

            while True:
                command = input("Enter 'E' to exit or 'C' to continue scanning: ")
                if command == "E":
                    return
                elif command == "C":
                    break
                else:
                    print("Invalid command. Please enter 'E' or 'C.")

if __name__ == "__main__":
    main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1163666.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jmeter只能做性能测试吗?

Jmeter除了可以性能测试,还能做接口测试 1、Jmeter和Fiddler,Postman有什么区别? Fiddler:虽然有接口测试功能,很少用来做接口测试。 一般用Fiddle来做抓包和异常测试,辅助接口测试。Postman: 是接口调试…

求任意连续子段的最小值之和

一道超级经典的单调栈问题&#xff0c;本题的关键在于你不要同时两边取等号&#xff0c;不然相等的区间会重复计算 还有记得开long long #include<bits/stdc.h> using namespace std; using lllong long; const int N 2e510; int n; ll a[N]; ll l[N]; ll r[N]; int m…

cudnn too short

原因是libcudnn.so为软链接&#xff0c;相当于快捷键&#xff0c;但是没有映射到真正的libcudnn.so.8.9.5上 cd /usr/local/cuda-11.6/lib64 ln -s libcudnn.so.8.9.5 libcudnn.so.8 ln -s libcudnn.so.8.9.5 libcudnn.so

VMware安装RedHat8.3虚拟机

red hat enterprise linux 8.3 ios镜像 链接&#xff1a;https://pan.baidu.com/s/1HbgXTh8q_YWlVVs8VAa14g?pwdot10 提取码&#xff1a;ot10 Red Hat Enterprise Linux&#xff08;RHEL&#xff09; 是一款由红帽公司开发和支持的商业操作系统。RHEL 8.3是RHEL 8系列的一个…

数据库事务提交后才发送MQ消息解决方案

项目场景&#xff1a; 在项目开发中常常会遇到在一个有数据库操作的方法中&#xff0c;发送MQ消息&#xff0c;如果这种情况消息队列效率比较快&#xff0c;就会出现数据库事务还没提交&#xff0c;消息队列已经执行业务&#xff0c;导致不一致问题。举个应用场景&#xff0c;…

stm32 ADC

目录 简介 stm32的adc 框图 ①电压输入范围 ②输入通道 ​编辑③ADC通道 ④ADC触发 ⑤ADC中断 ⑥ADC数据 ⑦ADC时钟 ADC的四种转换模式 hal库代码 标准库代码 简介 自然界的信号几乎都是模拟信号&#xff0c;比如光亮、温度、压力、声音&#xff0c;而为了方便存储、…

容器:软件性能测试的最佳环境

容器总体上提供了一种经济的和可扩展的方法来测试产品在实际情况下的性能&#xff0c;同时还能保持较低的资源成本和开销成本。 软件性能和可伸缩性是我们谈论应用程序开发时经常遇到的话题。一个很大的原因是应用程序的性能和可伸缩性直接影响其在市场上的成功。一个应用程序…

搭建Qt5.7.1+kylinV10开发环境、运行环境

1.下载Qt源码 Index of / 2.编译Qt 解压缩qt-everywhere-opensource-src-5.7.1.tar.gz 进入到qt-everywhere-opensource-src-5.7.1/qtbase/mkspecs这个目录下&#xff0c; 2.1找到以下目录 复制他&#xff0c;然后改名linux-x86-arrch64&#xff0c;博主这里名字取的有些问…

历年网规上午真题(2017年)

解析:D/C 计算机主要性能指标:时钟频率(主频)、运算速度、运算精度、内存大小、数据处理速率(PDR)等 数据库主要指标:最大并发、负载均衡能力、最大连接数等 解析:A 敏捷开发是一种应对快速变化的需求的一种软件开发方法,是一种以人为核心、迭代、循序渐进的开发方…

深度学习之基于Yolov5闯红灯及红绿灯检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、闯红灯及红绿灯检测系统![请添加图片描述](https://img-blog.csdnimg.cn/8f260c2ed5ed4d8596e27d38abe42745.jpeg)四. 总结 一项目简介 基于Y…

生成独立运行的QT程序

前言 使用windeployqt程序生成独立运行的QT程序。 方法 1.在QT Creator使用release构建运行一下代码&#xff0c;不使用debug模式&#xff0c;将release文件夹中生成的***.exe文件复制到一个新的文件夹下。 2.打开 Qt 5.14.2(MinGW 7.3.0 64-bit) 进入exe文件所在的目录执…

Java精品项目62基于Springboot+Vue实现的大学生在线答疑平台(编号V62)

Java精品项目62基于SpringbootVue实现的大学生在线答疑平台(编号V62) 大家好&#xff0c;小辰今天给大家介绍一个基于SpringbootVue实现的大学生在线答疑平台(编号V62)&#xff0c;演示视频公众号&#xff08;小辰哥的Java&#xff09;对号查询观看即可 文章目录 Java精品项目…

Temu新规,12岁以下儿童产品必需提供CPC认证

近日Temu发布儿童用品合规通知&#xff1a;为保障Temu平台消费者的合法权益&#xff0c;保障儿童类商品在目的国的正常销售及合规要求&#xff0c;针对以12岁及以下儿童为主要使用对象的产品&#xff0c; 卖家需提供CPC认证&#xff0c;要求说明&#xff1a; 1、所有产品均需…

linux 下 物理迁移 mysql 数据库 不能启动问题

1、授权问题 # chown -R 777 /app/db/mysql 2、/etc/my.cnf配置问题 [mysqld] basedir/app/db/mysql datadir/app/db/mysql/data socket/app/db/mysql/mysql.sock.lock innodb_buffer_pool_size128M innodb_force_recovery 1 symbolic-links0 [mysqld_safe] log-error/app/…

半方差函数详解

1 引言 托布勒的地理第一定律指出&#xff0c;“一切都与其他事物有关&#xff0c;但近处的事物比远处的事物更相关。 在半变异函数的情况下&#xff0c;更接近的事物更可预测&#xff0c;变异性更小&#xff0c;而遥远的事物则难以预测&#xff0c;相关性也较低。 例如&…

做CSGO游戏搬砖前,这五个问题必须了解

相信经常看我文章的人或多或少都已经了解steam搬砖项目&#xff0c;也叫CSGO游戏搬砖项目&#xff0c;还有人叫它&#xff1a;国外steam游戏汇率差项目&#xff0c;无论怎么称呼&#xff0c;都是同一个项目。虽然我已经实操Steam搬砖项目超过三年&#xff0c;带领了数百名学员踏…

文字间隔css

文字间隔 letter-spacing: 3px

linux入门---线程的同步

目录标题 什么是同步生产者和消费者模型三者之间的关系消费者生产者模型改进生产者消费者模型特点条件变量的作用条件变量有关的函数条件变量的理解条件变量的使用 什么是同步 这里通过一个例子来带着大家了解一下什么是同步&#xff0c;在生活中大家肯定遇到过排队的情景比如…

看完就牛了,自动化测试框架详解

一、引言 随着IT技术的快速发展&#xff0c;软件开发变得越来越快速和复杂化。在这种背景下&#xff0c;传统的手工测试方式已经无法满足测试需求&#xff0c;而自动化测试随之而生。 自动化测试可以提高测试效率和测试质量&#xff0c;减少重复性的测试工作&#xff0c;从而…