python一个批量载入插件的类

python一个批量载入插件的类
发布于 2 天前 阅读权限 无需登录 作者 ver007 212 次浏览 最后一次编辑是 1 天前 来自 开源项目

Python

图片.png

代码

#main.py
from load import LoadPlugin
def main():
        """
        主启动函数
        :return:
        """
        loadObj = LoadPlugin("plugin")
        plugins = loadObj.search()
        for plugin in plugins:
                Exploit = plugin.Exploit("New Obj scanPort Class")
                Exploit.run("Run Scan Work")
if __name__ == '__main__':
        main()
        
        
 # load.py
 class LoadPlugin:
        def __init__(self, path="."):
                """
                插件获取类
                :param path: 插件目录
                """
                self.models = []
                self.path = path
        def search(self):
                """
                搜索插件并载入
                :return list: 插件列表
                """
                for dir_str in os.listdir(self.path):
                        if dir_str not in ['.', '__init__.py'] and not dir_str.endswith('.pyc'):
                                try:
                                        plugin = __import__("plugin." + dir_str.replace('.py', ''), fromlist=[dir_str])
                                        self.models.append(plugin)
                                except ImportError, e:
                                        continue
                if self.models:
                        return self.models
                else:
                        return []
                        
# scanPort.py
class Exploit(object):
        """
        端口扫描类
        """
        def __init__(self, args):
                print args
        def run(self, target):
                print target

目录结构如下 ├── plugin # 插件目录 各种扫描模块 ├ └── __init__.py ├ └── scanPort.py └── load.py └── main.py

返回的是一个List ,里面是所有plugin目录的插件

load = LoadPlugin("目录所在目录")
plugins = load.search()

剩下的循环取出来执行就可以了

楼主配上一些图就好了,图文并茂更好理解些,原谅我这么笨!

tangscan插件我之前是把插件名字存在db里面,然后使用的时候从db里面读取。上面提到这种方式灵活啊。

发一个可以让模块以字符串的形式导入:

def new_import(name, code_path): module_code = “” with open(code_path, ‘rb’) as f: module_code = f.read() if not module_code: return None module = imp.new_module(name) exec module_code in module.dict return module

可以看下pluginbase 这个包, 或者 用importlib 中import_module


为您推荐了相关的技术文章:

  1. 印象笔记编辑增强 [AHK / Windows]
  2. easychen/catgate
  3. 基于Arachni构建自动化黑盒扫描平台
  4. 抓取全校新生照片 | 岚光
  5. 通过WebRTC获取内网和公网真实IP地址 | 岚光

原文链接: threathunter.org