目录遍历学习


#
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()

 

posted @ 2022-02-21 17:33  bingtanghulu  阅读(51)  评论(0编辑  收藏  举报