前言
一个用Python编写的目录扫描小工具的编写学习过程记录。
一、开端
1.简单描述
最简单的目录扫描就是一个URL加上拼接的路径,然后去做存活请求判断,如果返回状态码为200则代表存活,否则就pass。
2.逻辑编写
用户输入URL
然后根据用户输入的URL拼接目录字典去做请求访问
根据响应包的状态码判断是否存在此目录
打印输出
3.结果实现
创建个空白文件夹建几个文件,然后用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)
if __name__ == '__main__':
scan()
二、总结笔记
1)选择with…as… 是因为在读取完文件时会自动关闭。
#使用 with...as... 将文件取别名,open()为了打开文件,r参数为只读
#使用 with...as... 的好处在于,在对文件进行操作后,会自动关闭文件
with open("shell.txt","r") as f:
f.readline() #读取一行
f.readlines() #全部读取
f.read(10) #读取指定字节
2)python文件open()函数参数:r和rb比较
读取文本文件时,不要使用rb模式打开文件,而应该仅使用r模式。
推荐使用r打开文本文件。因为使用此模式打开文本文件时,python会默认为我们做一些处理,
比如:假设在windows下,将本来应该读入的换行符\r\n处理成\n,方便我们处理。
(值得一提的是,当你将\n写入文件时,python也会默认将其替换成\r\n,如果你是win系统的话)
补充:其实是启用了通用换行符支持(UNS),它默认开启。
使用rb的话,则python不会对文本文件预处理了,你读入的\r\n依然是\r\n.
t是文本模式