目录遍历学习
#conding:utf-8 import requests import sys #加载字典文件 #使用with .. as ..会自动关闭文件流;使用f = open(“filename.txt”,”r”) 需要close关闭文件流。 #每次读取1行 f.readline() #一次读取完 f.readlines() #读取X个字节 f.read(X) with open('big.txt','r',encoding='UTF-8') as readfile: for dirs in readfile.readlines(): #生成对应url url ="http://www.baidu.com/"+dirs.strip('\n') resp = requests.get(url) strlen=len(resp.text) #将扫描结果输出 print(url+'---'+str(resp.status_code)) #判断特殊状态码,将对应url保存到文件之中 if resp.status_code ==200 or resp.status_code==403 or resp.status_code==301 or resp.status_code==500: with open('write.txt','a',encoding='UTF-8') as writefile: writefile.write(url+'---'+str(resp.status_code))
import requests import sys url = sys.argv[1] with open("dir.txt","r") as f: for line in f.readlines(): line = line.strip() r = requests.get(url+"/"+line) if r.status_code == 200: print("url:" + r.url + " 存在")
#conding:utf-8 import math,threading,sys,getopt,requests #介绍 def banner(): print() print("*" * 2 + " " * 17 + "DIR" + " " * 17 + "*" * 2) print() def usage(): print() print("python main.py -u url -t thread -d dictionary") print() #多线程 def multi_scan(url,threads,dic): result_list = [] #存放字典的最终列表 with open("/Users/bingtanghulu/Desktop/dic.txt","r")as f: dic_list = f.readlines() lenth = len(dic_list) #确定一个线程读取几行字典的内容,Math.ceil()方法返回大于或等于给定浮点数的最小整数。 thread_read_line_num = math.ceil(len(dic_list) / int(threads)) i = 0 temp_list = [] #临时列表 for line in dic_list: i = i + 1 if i % thread_read_line_num == 0: # 如果够一个线程取得数量了 temp_list.append(line.strip()) result_list.append(temp_list) # 将当前线程创建的临时列表 存放到最终空列表中 temp_list = [] elif i == lenth: # 防止不够整除,少了最后一个数组。 temp_list.append(line.strip()) result_list.append(temp_list) else: temp_list.append(line.strip()) # 放一个数据到临时列表 # print(result_list) #打印输出最终列表 threads_list = [] # 定义一个空的多线程列表 # 制作一个多线程列表 for i in result_list: threads_list.append(threading.Thread(target=scan, args=(url, i))) # url由命令行传入 # 启动多线程 for t in threads_list: t.start() #定义一个目录扫描函数 def scan(url,dic): headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0"} for line in dic: r = requests.get(url+'/'+line,headers=headers) if r.status_code == 200: print(r.url + " : " + str(r.status_code)) #定义获取命令行参数的函数,也是程数开始的地方 def start(): banner() if len(sys.argv) == 7: opts,args = getopt.getopt(sys.argv[1:],"u:t:d:") #从命令行获取参数 for k,v in opts: #print(k,v) if k == '-u': #这个 “ - ”不要忘了 url = v elif k == '-t': threads = v elif k == '-d': dic = v else: print("传输的参数有误") usage() sys.exit() # 结束当前程序 multi_scan(url,threads,dic) #将获取到的参数传入多线程函数,并执行。 else: print("传输的参数有误") usage() sys.exit() #结束当前程序 if __name__ =="__main__": start()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通