Python开发网站目录扫描器的实现


Posted in Python onFebruary 21, 2019

有人问为什么要去扫描网站目录:懂的人自然懂

这个Python脚本的特点:

1.基本完善

2.界面美观(只是画了个图案)

3.可选参数增加了线程数

4.User Agent细节处理

5.多线程显示进度

扫描目标:Metasploitable Linux

代码:WebDirScanner.py:

# -*- coding:utf-8 -*-
__author__ = "Yiqing"
import sys
import threading
import random
from Queue import Queue
from optparse import OptionParser

try:
  import requests
except Exception:
  print "[!] You need to install requests module!"
  print "[!] Usage:pip install requests"
  exit()


class WebDirScan:
  """
  Web目录扫描器
  """

  def __init__(self, options):
    self.url = options.url
    self.file_name = options.file_name
    self.count = options.count

  class DirScan(threading.Thread):
    """
    多线程
    """

    def __init__(self, queue, total):
      threading.Thread.__init__(self)
      self._queue = queue
      self._total = total

    def run(self):
      while not self._queue.empty():
        url = self._queue.get()
        # 多线程显示进度
        threading.Thread(target=self.msg).start()
        try:
          r = requests.get(url=url, headers=get_user_agent(), timeout=5)
          if r.status_code == 200:
            sys.stdout.write('\r' + '[+]%s\t\t\n' % url)
            # 保存到本地文件,以HTML的格式
            result = open('result.html', 'a+')
            result.write('<a href="' + url + '" rel="external nofollow" target="_blank">' + url + '</a>')
            result.write('\r\n</br>')
            result.close()
        except Exception:
          pass

    def msg(self):
      """
      显示进度
      :return:None
      """
      per = 100 - float(self._queue.qsize()) / float(self._total) * 100
      percent = "%s Finished| %s All| Scan in %1.f %s" % (
        (self._total - self._queue.qsize()), self._total, per, '%')
      sys.stdout.write('\r' + '[*]' + percent)

  def start(self):
    result = open('result.html', 'w')
    result.close()
    queue = Queue()
    f = open('dict.txt', 'r')
    for i in f.readlines():
      queue.put(self.url + "/" + i.rstrip('\n'))
    total = queue.qsize()
    threads = []
    thread_count = int(self.count)
    for i in range(thread_count):
      threads.append(self.DirScan(queue, total))
    for thread in threads:
      thread.start()
    for thread in threads:
      thread.join()


def get_user_agent():
  """
  User Agent的细节处理
  :return:
  """
  user_agent_list = [
    {'User-Agent': 'Mozilla/4.0 (Mozilla/4.0; MSIE 7.0; Windows NT 5.1; FDM; SV1; .NET CLR 3.0.04506.30)'},
    {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; en) Opera 11.00'},
    {
      'User-Agent': 'Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.2) Gecko/2008092313 Ubuntu/8.04 (hardy) Firefox/3.0.2'},
    {
      'User-Agent': 'Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.1.15) Gecko/20101027 Fedora/3.5.15-1.fc12 Firefox/3.5.15'},
    {
      'User-Agent': 'Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.551.0 Safari/534.10'},
    {'User-Agent': 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.2) Gecko/2008092809 Gentoo Firefox/3.0.2'},
    {
      'User-Agent': 'Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/7.0.544.0'},
    {'User-Agent': 'Opera/9.10 (Windows NT 5.2; U; en)'},
    {
      'User-Agent': 'Mozilla/5.0 (iPhone; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko)'},
    {'User-Agent': 'Opera/9.80 (X11; U; Linux i686; en-US; rv:1.9.2.3) Presto/2.2.15 Version/10.10'},
    {
      'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5'},
    {'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9b3) Gecko/2008020514 Firefox/3.0b3'},
    {
      'User-Agent': 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; fr) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16'},
    {
      'User-Agent': 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20'},
    {
      'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; InfoPath.2)'},
    {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux x86_64; en) Opera 9.60'},
    {
      'User-Agent': 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.366.0 Safari/533.4'},
    {'User-Agent': 'Mozilla/5.0 (Windows NT 6.0; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.51'}
  ]

  return random.choice(user_agent_list)


def main():
  """
  主函数
  :return: None
  """
  print '''
   ____ _   ____         
  | _ \(_)_ __/ ___| ___ __ _ _ __ 
  | | | | | '__\___ \ / __/ _` | '_ \ 
  | |_| | | |  ___) | (_| (_| | | | |
  |____/|_|_| |____/ \___\__,_|_| |_|

  Welcome to WebDirScan
  Version:1.0 Author: %s
  ''' % __author__
  parser = OptionParser('python WebDirScanner.py -u <Target URL> -f <Dictionary file name> [-t <Thread_count>]')
  parser.add_option('-u', '--url', dest='url', type='string', help='target url for scan')
  parser.add_option('-f', '--file', dest='file_name', type='string', help='dictionary filename')
  parser.add_option('-t', '--thread', dest='count', type='int', default=10, help='scan thread count')
  (options, args) = parser.parse_args()
  if options.url and options.file_name:
    dirscan = WebDirScan(options)
    dirscan.start()
    sys.exit(1)
  else:
    parser.print_help()
    sys.exit(1)


if __name__ == '__main__':
  main()

需要一个字典文件:

我存进去了一些,一部分是确定存在的目录

dict.txt

index.php
login
dvwa
phpMyAdmin
dav
twiki
login.php

结果:得到一个HTML文件:

<a href="http://192.168.232.129/twiki" rel="external nofollow" target="_blank">http://192.168.232.129/twiki</a>

</br><a href="http://192.168.232.129/index.php" rel="external nofollow" target="_blank">http://192.168.232.129/index.php</a>

</br><a href="http://192.168.232.129/phpMyAdmin" rel="external nofollow" target="_blank">http://192.168.232.129/phpMyAdmin</a>

</br>

脚本的使用:

Python开发网站目录扫描器的实现

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中在脚本中引用其他文件函数的实现方法
Jun 23 Python
django基础之数据库操作方法(详解)
May 24 Python
Python守护线程用法实例
Jun 23 Python
python技能之数据导出excel的实例代码
Aug 11 Python
Python使用SQLite和Excel操作进行数据分析
Jan 20 Python
利用python为运维人员写一个监控脚本
Mar 25 Python
对Python多线程读写文件加锁的实例详解
Jan 14 Python
python 多线程对post请求服务器测试并发的方法
Jun 13 Python
Python如何脚本过滤文件中的注释
May 27 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
Jul 02 Python
Python爬虫入门教程01之爬取豆瓣Top电影
Jan 24 Python
粗暴解决CUDA out of memory的问题
May 22 Python
Python爬虫之UserAgent的使用实例
Feb 21 #Python
利用python实现在微信群刷屏的方法
Feb 21 #Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
Feb 21 #Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
Feb 21 #Python
对python借助百度云API对评论进行观点抽取的方法详解
Feb 21 #Python
用python实现刷点击率的示例代码
Feb 21 #Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
Feb 21 #Python
You might like
PHP中开启gzip压缩的2种方法
2015/01/31 PHP
PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】
2019/06/14 PHP
PHP 对象接口简单实现方法示例
2020/04/13 PHP
firefox下jquery ajax返回object XMLDocument处理方法
2014/01/26 Javascript
node.js中的fs.stat方法使用说明
2014/12/16 Javascript
使用jquery 简单实现下拉菜单
2015/01/14 Javascript
js实现大转盘抽奖游戏实例
2015/06/24 Javascript
学习JavaScript设计模式(继承)
2015/11/26 Javascript
初识angular框架后的所思所想
2016/02/19 Javascript
AngularJS 作用域详解及示例代码
2016/08/17 Javascript
JS对象是否拥有某属性如何判断
2017/02/03 Javascript
Bootstrap路径导航与分页学习使用
2017/02/08 Javascript
Node.js数据库操作之查询MySQL数据库(二)
2017/03/04 Javascript
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
2018/01/25 jQuery
小程序组件之仿微信通讯录的实现代码
2018/09/12 Javascript
video.js 一个页面同时播放多个视频的实例代码
2018/11/27 Javascript
Angular2实现的秒表及改良版示例
2019/05/10 Javascript
原生JavaScript写出Tabs标签页的实例代码
2020/07/20 Javascript
微信小程序抽奖组件的使用步骤
2021/01/11 Javascript
Python线程详解
2015/06/24 Python
python3.4下django集成使用xadmin后台的方法
2017/08/15 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
2018/02/08 Python
Python selenium模块实现定位过程解析
2020/07/09 Python
详解Open Folder as PyCharm Project怎么添加的方法
2020/12/29 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
2021/03/02 Python
pytorch 计算Parameter和FLOP的操作
2021/03/04 Python
CSS3弹性盒模型开发笔记(三)
2016/04/26 HTML / CSS
app内嵌H5 webview 本地缓存问题的解决
2020/10/19 HTML / CSS
耐克美国官网:Nike.com
2016/08/01 全球购物
高中英语教学反思
2014/02/04 职场文书
《记承天寺夜游》教学反思
2014/02/16 职场文书
劳动竞赛活动方案
2014/02/20 职场文书
大学生怎样写好自荐信
2014/02/25 职场文书
写求职信要注意什么问题
2014/04/12 职场文书
小学校长竞聘演讲稿
2014/05/16 职场文书
python自动获取微信公众号最新文章的实现代码
2022/07/15 Python