首页 > 编程语言 >Python黑客编程之拓印web扫描器

Python黑客编程之拓印web扫描器

时间:2023-02-11 18:00:36浏览次数:45  
标签:__ web Python 拓印 file import path os

描述

  • 遍历cms网站的本地目录,作为参考来扫描远程网站的目录和文件

实现

  • 用os.walk实现嵌套目录的遍历
  • 用多线程发起requests请求,考虑线程安全,变量应装在队列中而不是列表中
  • python命名元组,类似字典的使用,但比字典消耗的内存更小
    • point = namedtuple('Point', ['x', 'y'])
  • 关于函数的参数*args和**kwargs的介绍:
    • 一个星号表示以元组形式导入所有参数
    • 两个星号表示以字典形式导入所有参数
  • 关于python上下文管理器的介绍:
    • 用来管理资源和处理异常
    • 通过with来使用
    • 有两种实现方式:
      • 基于类:简单点说,就是在一个类里,实现了__enter____exit__的方法,这个类的实例就是一个上下文管理器
      • 基于生成器:不用写类,只用写一个带装饰器的函数。在被装饰函数里,必须是一个生成器(带有yield),而yield之前的代码,就相当于__enter__里的内容。yield 之后的代码,就相当于__exit__ 里的内容,例子:
import contextlib

@contextlib.contextmanager
def open_func(file_name):
    # __enter__方法
    print('open file:', file_name, 'in __enter__')
    file_handler = open(file_name, 'r')

    try:
        yield file_handler
    except Exception as exc:
        # deal with exception
        print('the exception was thrown')
    finally:
        print('close file:', file_name, 'in __exit__')
        file_handler.close()

        return

with open_func('/Users/MING/mytest.txt') as file_in:
    for line in file_in:
        1/0
        print(line)

代码

  • 先遍历本地目录,保存到web_paths队列中,再开启多个requests线程,从web_paths中每次去一跳路径进行测试,返回200则放入results队列中
import contextlib
import os
import queue
import sys
import threading
import time
import requests

FILTERED = [".jpg", ".gif", ".png", ".css"]
TARGET = "https://localhost/wordpress"
THREAD = 10

results = queue.Queue()
web_paths = queue.Queue()

def gather_paths():
    for root, _, files in os.walk('.'):
        for fname in files:
            if os.path.splitext(fname)[1] in FILTERED:
                continue
            path = os.path.join(root, fname)
            if path.startswith("."):
                path = path[1:]
            print(path)
            web_paths.put(path)

@contextlib.contextmanager
def chdir(path):
    this_dir = os.getcwd()
    os.chdir(path)
    try:
        yield
    finally:
        os.chdir(this_dir)

def test_remote():
    while not web_paths.empty():
        path = web_paths.get()
        url = f'{TARGET}{path}'
        time.sleep(2)
        r = requests.get(url)
        if r.status_code == 200:
            results.put(url)
            sys.stdout.write('+')
        else:
            sys.stdout.write('x')
        sys.stdout.flush()

def run():
    mythreads = list()
    for i in range(THREAD):
        print(f"Spawning thread {i}")
        t = threading.Thread(target=test_remote)
        mythreads.append(t)
        t.start
    for thread in mythreads:
        thread.join()

if __name__ == "__main__":
    with chdir("E:\\Project\\Python\\blackhat\\ScanWeb\\wordpress"):
        gather_paths()
    input("Press return to continue.")

    run()
    with open("results.txt", "w+") as f:
        while not results.empty():
            f.write(f"{results.get()}\n")
        print("done.")

标签:__,web,Python,拓印,file,import,path,os
From: https://www.cnblogs.com/z5onk0/p/17112233.html

相关文章

  • C++ 调用 Python 总结(一)
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。前置说明  本文作为本人csdnblog的主站的备份。(BlogID......
  • [oeasy]python0081_ANSI序列由来_终端机_VT100_DEC_VT选项_终端控制序列
    更多颜色回忆上次内容上次首先了解了RGB颜色设置可以把一些抽象的色彩名字落实到具体的RGB颜色计算机所做的一切其实就是量化、编码把生活的一......
  • 4.Python流程控制语句
    1.条件判断语句(if语句)①语法:if条件表达式 :  代码块②用法:if语句在执行时,会先对条件表达式进行求值判断,如果为True,则执行if后的语句;如果......
  • 3.Python的数据类型
    1.字面量和变量字面量:就是一个一个的值,所表示的意思就是它的字面的值,在程序中可以直接使用字面量,比如:1,2,‘HELLO’。变量:可以用来保存字面量,并且变量中保存的字面量是......
  • Ubuntu(Linux) PyQt5 QtUIFile 转换为 PythonModule (pyuic.py/pyuic脚本)
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。前置说明  本文作为本人csdnblog的主站的备份。(BlogID......
  • Ubuntu14.04 apache2 配置 CGI(并测试:shell,可执行文件,python)
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。前置说明  本文作为本人csdnblog的主站的备份。(BlogID......
  • 5个python中编程的大坑
    对于Python新手来说,写代码很少考虑代码的效率和简洁性,因此容易造成代码冗长、执行慢,这些都是需要改进的地方。本文是想通过几个案列给新手一点启发,怎样写python代码更优雅......
  • python入门之集合&固定集合
    """集合set定义:1.由一系列不重复的不可变类型变量组成的可变映射容器2.相当于只有键没有值的字典(键则是集合的数据)基础操作......
  • python 打包
     1、将python打包成exe的方式python上常见的打包方式目是通过pyinstaller来实现的。pipinstallpyinstaller或者用镜像下载:#清华源pipinstallpyinstaller-ih......
  • 前端知识学习案例24-web3.0简介
     去中心化保护隐私3DVRAR......