华育智远 全国咨询热线:027-59308985 027-59308959
新闻案例>行业动态
工具分享|使用AI编写目录扫描工具
时间:2025.07.10 10:21

目录扫描,主要用于探测目标服务器或网站上的隐藏目录和文件,下面开始展示具体操作步骤啦!

图片


1



确保安装python环境

图片
图片

前面文章有好几篇关于python的安装步骤及其环境的配置,这里我就不多讲咯

官网下载地址

https://www.python.org/

安装时记得勾选“Add Python to PATH”。

win+R键,cmd检测一下它的版本,出现了版本号就是安装成功啦

C:\Users\HUAWEI>python --versionPython 3.13.3

2



确保安装了Git(这是为了后面克隆字典文件做准备)

图片
图片

Windows:

  1. 打开浏览器,访问网址:

https://git-scm.com/downloads

2.安装完成后,打开命令行(Win+R → 输入 cmd),输入:

git --version

✅ 如果显示版本号(如 git version 2.49.0),说明安装成功。

图片
图片
图片

3



创建目标文件夹

图片
图片

目的:

为了统一管理代码和资源,避免文件混乱。

在桌面创建一个名为 dir_scanner_gui 的文件夹:

桌面/└── dir_scanner_gui/

4



获取字典文件

图片
图片

字典是扫描的“路径列表”,比如 /admin, /login 等。扫描工具会读取它逐一尝试请求。  

1.从GitHub 克隆 SecLists 字典库  


 git clone https://github.com/ danielmiessler/SecLists.git
图片

2.找到常用字典如common.txt,把它复制到 dir_scanner_gui/ 文件夹里面去,并改名字,最后dict.txt 就是你要在代码中用到的字典文件。

作用:这将是你程序中使用的扫描目标路径列表。

Copy-Item"C:/Users/HUAWEI/Desktop/1/SecLists/Discovery/Web-Content/common.txt""C:\Users\HUAWEI\Desktop\dir_scanner_gui\dict.txt"

5



编写扫描工具程序

图片
图片

安装依赖模块(如requests)

requests 是 Python 用于发起 HTTP 请求的库,是扫描网站目录的核心。

你需要 requests(发起 HTTP 请求)和 tkinter(图形界面)。  

pip install requests# tkinter 默认内置于 Python 中,无需额外安装
图片

到这里就已经准备就绪

图片

6



编写核心扫描逻辑,创建GUI界面程序

图片
图片

作用:

实现对指定网站进行路径尝试,读取 dict.txt 中的路径逐个请求。  

scanner.py:  

让用户通过图形界面输入 URL、点击按钮开始扫描,并看到结果输出,提升用户体验。

下面这是一个添加多线程扫描,停止扫描按钮,扫描进度条, 扫描结果导出为 TXT 文件的按钮的脚本文件 

下面这个脚本是主包利用ai给的基础代码,加上给ai说需求添加各种命令,最后得来的完整的目录扫描脚本

import threadingimport tkinter as tkfrom tkinter import messagebox, filedialog, ttkimport requestsimport os# 全局变量控制扫描状态stop_flag = Falsedef do_scan(target_url, result_box, progress_bar, start_button, stop_button):    global stop_flag    stop_flag = False    dict_path = "dict.txt"    ifnot os.path.exists(dict_path):        messagebox.showerror("错误"f"未找到字典文件 {dict_path}")        return    try:        with open(dict_path, "r", encoding="utf-8"as f:            paths = f.read().splitlines()    except Exception as e:        messagebox.showerror("错误"f"读取字典文件失败: {e}")        return    result_box.delete("1.0", tk.END)    total = len(paths)    if total == 0:        messagebox.showinfo("提示""字典文件为空")        return    progress_bar["maximum"] = total    progress_bar["value"] = 0    for i, path in enumerate(paths, 1):        if stop_flag:            result_box.insert(tk.END, "\n扫描已停止\n")            break        url = f"{target_url.rstrip('/')}/{path.strip()}"        try:            r = requests.get(url, timeout=5)            status = r.status_code            result_box.insert(tk.END, f"[{status}{url}\n")        except requests.RequestException as e:            result_box.insert(tk.END, f"[请求失败] {url} - {str(e)}\n")            continue        progress_bar["value"] = i        progress_bar.update_idletasks()    start_button.config(state=tk.NORMAL)    stop_button.config(state=tk.DISABLED)def scan():    target_url = entry.get().strip()    ifnot target_url.startswith(("http://""https://")):        messagebox.showerror("错误""请输入合法的URL(例如:http://example.com)")        return    start_button.config(state=tk.DISABLED)    stop_button.config(state=tk.NORMAL)    threading.Thread(target=do_scan, args=(target_url, result_box, progress_bar, start_button, stop_button), daemon=True).start()def stop_scan():    global stop_flag    stop_flag = Truedef export_results():    file_path = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=[("Text Files""*.txt")])    if file_path:        try:            with open(file_path, "w", encoding="utf-8"as f:                f.write(result_box.get("1.0", tk.END))            messagebox.showinfo("导出成功"f"结果已保存到 {file_path}")        except Exception as e:            messagebox.showerror("错误"f"保存文件失败: {e}")# GUI 初始化app = tk.Tk()app.title("目录扫描工具")app.geometry("700x500")tk.Label(app, text="目标网址:").pack()entry = tk.Entry(app, width=80)entry.pack(pady=5)btn_frame = tk.Frame(app)btn_frame.pack(pady=10)start_button = tk.Button(btn_frame, text="开始扫描", command=scan)start_button.pack(side=tk.LEFT, padx=5)stop_button = tk.Button(btn_frame, text="停止扫描", command=stop_scan, state=tk.DISABLED)stop_button.pack(side=tk.LEFT, padx=5)export_button = tk.Button(btn_frame, text="导出结果", command=export_results)export_button.pack(side=tk.LEFT, padx=5)progress_bar = ttk.Progressbar(app, orient="horizontal", length=600, mode="determinate")progress_bar.pack(pady=5)result_box = tk.Text(app, wrap="none")result_box.pack(expand=True, fill="both", padx=10, pady=10)
app.mainloop()

下面这是脚本中出现的比较关键的部分解释

部分                  作用tkinter               构建图形用户界面requests              向目标网站发起目录请求entry.get()           获取用户输入的目标网址dict.txt              读取字典中的目录requests.get(url)     对每个路径进行访问测试Text显示框            显示成功的目录(状态码为200

到这里,脚本也已经知道编写进去了,就剩扫描咯

图片


7



利用目录扫描工具

图片
图片
http://testphp.vulnweb.com

是一个合法的测试靶场网站,专门为学习网站安全、测试扫描工具设计。
你可以放心对它进行目录扫描测试,而不会涉及非法行为。 

扫描结果如下:

图片

最后是扫描出的目标网站的响应情况状态码的解释

图片

okok,那今天的目录扫描的工具分享到这里就结束啦,我们下下下~期再见!

图片


湖北华育智远信息科技有限公司
Hubei Huayuzhiyuan Information Technology Co.,Ltd
公司地址:湖北省武汉市东湖新技术开发区华师园北路6号腾睿大厦A座12楼(华中师大一附中旁)
咨询电话:027-59308985 027-59308959

鄂ICP备2023004300号

微信公众号
扫码咨询
官方视频号
官方抖音号
扫码咨询
在线客服
索取资料
合作共赢