前言
一个用Python编写的目录扫描小工具的编写学习过程记录。
一、改变
1.简单描述
想增加多域名文件目录扫描。失败了,还需要增加多线程队列等。
2.逻辑编写
用户输入文件。
提取出用户输入文件中的域名URL和目录字典逐一去拼接请求访问。
根据响应包的状态码判断是否存在此目录。
打印输出。
3.结果实现
在当前文件夹中,新建一个url.txt存放域名和dir.txt目录字典文件。然后用python开启HTTP服务,自己扫自己。
4.代码部分
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# author: Mauro_K
import requests
def scan():
#导入字典文件,url和目录拼接,发起HTTP请求,用过响应码判断目录是否存在
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:105.0) Gecko/20100101 Firefox/105.0"
}
url = input('请输入需要目录爆破的URL:').strip()
# 打开当前目录下的dir.txt字典文件,并遍历读取所有行然后返回一个列表。
with open('./dir.txt','rt',encoding='utf-8') as f:
m = f.readlines()
# 用for循环使url拼接dir.txt中的内容 然后请求访问后判断状态码是否是200
for i in m:
Url = url + i.strip()
response = requests.get(Url,headers=headers, timeout=1)
try:
if response.status_code == 200:
print('[+]存在目录:' + Url)
else:
pass
except Exception as e:
print(e)
def scand():
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:105.0) Gecko/20100101 Firefox/105.0"
}
# url文件存放的路径
pwd = input('请输入文件路径:').strip()
# 打开用户输入的文本,遍历读取所有行然后返回一个列表。
with open(pwd, 'rt', encoding='utf-8') as f:
m = f.readlines()
# 遍历文件中的url
for i in m:
# 打开当前目录下的dir.txt字典文件,遍历读取所有行然后返回一个列表。
with open('./dir.txt', 'rt', encoding='utf-8') as f:
j = f.readlines()
# 对用户输入的url文件中的所有URL 去逐一拼接字典文件中的目录
for h in j:
Url = i.strip() + h.strip()
response = requests.get(Url, headers=headers, timeout=1)
try:
if response.status_code == 200:
print('[+]存在目录:' + Url)
else:
pass
except Exception as e:
print(e)
def dirScan():
print('======================================================')
print('单个域名爆破请选择1:')
print('多个域名爆破请选择2:')
print('======================================================')
t = input('请输入扫描模式:').strip()
if t == '1':
scan()
elif t == '2':
scand()
else:
print('参数错误!')
if __name__ == '__main__':
dirScan()
二、总结笔记
1)遍历URL和目录字典后,二者结合拼接去做http请求时要先把二者用strip()函数处理一下,否则会造成做请求时URL结尾会有%0A造成请求失败。