通常我们使用Python进行类工具开发的时候,都会使用一些初始化的方法进行参数的定义,
今天我们来分享几个比较方便快捷的方法,方法如下:
我们首先继承一个多线程的类,方便进行多线程和队列的排序,当然其中的方法我们今天不做过多的赘述。
class DirScan(threading.Thread): def __init__(self, url ,queue, name=None): """ 初始化 传递了一个队列进来 :param queue: 队列里面放的就是我们需要去请求的路径 :param name: """ super().__init__(name) self.__queue = queue self.__save_path = "./result.txt" self.url = url
其中 self.url 就是我们初始化类的时候 构造函数所需要的传参/也就是我们这个方法类所需要到的属性
以下是我自己封装的一个ip扫描的类 通过打开固定的txt文档来进行扫描
# coding=utf-8 # Author: HSJ # 2023/9/13 15:21 import logging import os import threading from queue import Queue import time from python_tools.common.requests_method import Request import logging import time class DirScan(threading.Thread): def __init__(self, queue, name=None): """ 初始化 传递了一个队列进来 :param queue: 队列里面放的就是我们需要去请求的路径 :param name: """ super().__init__(name) self.__queue = queue self.__save_path = "./result.txt" # self.__url_all = [] def run(self): # 从队列里面去取数据, 什么时候需要去取数据?只要队列不为空就去取 while not self.__queue.empty(): try: # 从队列里面取出一个路径 web_dir = self.__queue.get() res = Request.url_get(url=web_dir) if res.status_code in [200, 403, 302]: # self.__url_all.append(web_dir) # with open(self.__save_path,"a+"): # for i in self.__url_all: # print(i) print(f"[**]{web_dir}...{res.status_code}") except Exception : pass def start(url, type, count): """ 启动扫描的方法 :param url: 需要扫描的网站 :param type: 网站的类型 :param count: 线程的数量 :return: """ # 准备一个队列 queue = Queue() # 先去读取字典 dict_path = f"./{type}.txt" # 读取字典 with open(dict_path) as f: for dir in f: dir_name = dir.rstrip("\n") queue.put(f'{url}{dir_name}') # 准备容器 threads = [] # 创建线程 for i in range(count): threads.append(DirScan(queue)) for t in threads: t.start() for t in threads: t.join() if __name__ == '__main__': start_time = time.time() url = "http://xxx.xxxxxxxx.com/" type = "php" thread_count = 5 start(url, type, thread_count) end_time = time.time() print(f"消耗的时间:{end_time-start_time}")
使用的时候只需要把url入参修改即可