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('\n'))
            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('\r'+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()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sinat_40572875

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值