zoukankan      html  css  js  c++  java
  • python3-网站路径扫描

    路径扫描:

      这个脚本是通过异步IO请求,通过创建多个进程来增加扫描速度,通过返回状态码不同来判断是否存在子路径。(如果存在域名泛解析,则需要和目标域名网页的MD5比对,比对相同则表示存在域名泛解析,当然这种判断方式存在误差,后面会同步域名泛解析判断脚本),这里只是熟悉并利用python3异步IO的特性,测试扫描速度。

    需要修改参数:target : 目标域名

              urlpath:字典文件

             processnum:进行数

    源码仅供参考

    import hashlib
    import aiohttp
    import asyncio
    from multiprocessing import Process, Queue, Manager
    # """
    #     aiohttp:发送http请求
    #     1.创建一个ClientSession对象
    #     2.通过ClientSession对象去发送请求(get, post, delete等)
    #     3.await 异步等待返回结果
    # """
    
    
    class Dirscan():
        def __init__(self,target):
            self.target = target
            self.targetmd5 = ''
            self.allqueue = Queue()
            self.urlpath =r'字典文件'       #字典文件,可以修改
            self.Ansdomain = Manager().list()
            self.processnum = 8             #进程数 可以修改
            self.alldictnum= 0
    
    
    
    
        def dicturl(self):
            with open(self.urlpath,'r',encoding='utf-8') as f:
                for i in f.readlines():
                    self.allqueue.put(self.target+'/'+i.strip('
    '))
                self.alldictnum= self.allqueue.qsize()
    
    
    
    
        async def main(self,url):
            async with aiohttp.ClientSession() as session:
                async with session.get(url) as res:
                    htmlstr= await res.text()
                    md5hash = hashlib.md5(htmlstr.encode("utf8"))
                    md5 = md5hash.hexdigest()
                    return res.status,md5
    
    
    
        def dirscan(self):
            loop = asyncio.get_event_loop()
            task = loop.create_task(self.main(self.target))
            status, self.targetmd5 = loop.run_until_complete(task)
    
            while self.allqueue.empty() != True:
                tmp = self.allqueue.get()
                task = loop.create_task(self.main(tmp))
                try:
                    print('
    '+str(int(self.alldictnum)-int(self.allqueue.qsize()))+'/'+str(int(self.alldictnum)),end='')
                    status,mad5 = loop.run_until_complete(task)
                    #print('bad : '+tmp)
                    if ((status==200) and (mad5!=self.targetmd5)):
                        print('OK : '+tmp)
                        self.Ansdomain.append(tmp)
                except Exception as e:
                    print(e)
    
    
        def SetProcess(self):
            self.dicturl()
            allprocess = []
            for i in range(0, self.processnum):
                p = Process(target=self.dirscan, args=())
                p.start()
                allprocess.append(p)
            for i in allprocess:
                i.join()
            for i in allprocess:
                i.close()
    
    
    if __name__ == '__main__':
        obj = Dirscan('http://4399.com')
        obj.SetProcess()
  • 相关阅读:
    MapReduce in MongoDB
    MongoDB的一些基本操作
    谈谈NOSQL
    Java中的反射(1)
    Mybatisの常见面试题
    关于Lombok和自动生成get set方法
    订Pizza(Java)
    美化Div的边框
    爱,死亡和机器人(Love,Death&Robots)
    session与cookie的介绍和两者的区别之其相互的关系
  • 原文地址:https://www.cnblogs.com/Tempt/p/14417671.html
Copyright © 2011-2022 走看看