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中使用sort()方法进行排序的简单教程
May 21 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
May 04 Python
Python BS4库的安装与使用详解
Aug 08 Python
tensorflow实现加载mnist数据集
Sep 08 Python
Python告诉你木马程序的键盘记录原理
Feb 02 Python
python把ipynb文件转换成pdf文件过程详解
Jul 09 Python
Python如何调用外部系统命令
Aug 07 Python
python实现用户名密码校验
Mar 18 Python
基于python和flask实现http接口过程解析
Jun 15 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
Oct 19 Python
python 使用三引号时容易犯的小错误
Oct 21 Python
python 调用js的四种方式
Apr 11 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数据流应用的简单例子
2012/06/01 PHP
PHP中auto_prepend_file与auto_append_file用法实例分析
2014/09/22 PHP
Linux环境下php实现给网站截图的方法
2016/05/03 PHP
程序员的表白神器“520”大声喊出来
2016/05/20 PHP
完美利用Yii2微信后台开发的系列总结
2016/07/18 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
2019/07/26 PHP
用JQuery 实现的自定义对话框
2007/03/24 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
2013/12/18 Javascript
javascript实现瀑布流加载图片原理
2016/02/02 Javascript
jQuery通过deferred对象管理ajax异步
2016/05/20 Javascript
深入理解JavaScript 函数
2016/06/06 Javascript
angular内置provider之$compileProvider详解
2017/09/27 Javascript
vue 将页面公用的头部组件化的方法
2017/12/18 Javascript
利用vue开发一个所谓的数独方法实例
2017/12/21 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
如何获取TypeScript的声明文件.d.ts
2018/05/01 Javascript
原生javascript实现连连看游戏
2019/01/03 Javascript
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
Vue为什么要谨慎使用$attrs与$listeners
2020/08/27 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
2020/11/04 Javascript
Python实现Tab自动补全和历史命令管理的方法
2015/03/12 Python
Python中subprocess的简单使用示例
2015/07/28 Python
Python小白必备的8个最常用的内置函数(推荐)
2019/04/03 Python
pandas 缺失值与空值处理的实现方法
2019/10/12 Python
python多进程重复加载的解决方式
2019/12/13 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
2020/01/02 Python
Python中常用的高阶函数实例详解
2020/02/21 Python
如何基于python实现不邻接植花
2020/05/01 Python
python输入中文的实例方法
2020/09/14 Python
澳大利亚儿童精品仓库:Goo & Co.
2019/06/20 全球购物
机械工程系毕业生求职信
2013/09/27 职场文书
2014年两会学习心得范例
2014/03/17 职场文书
新农村建设典型材料
2014/05/31 职场文书
夫妻忠诚协议书范本
2014/11/17 职场文书
升学宴来宾致辞
2015/07/27 职场文书