Python中如何将openWordlist方法传入scanDomain方法实现目录扫描
问题核心原因
- 你在
openWordlist里处理得到的word是方法内的局部变量,方法运行结束就会被销毁,scanDomain无法直接访问 - 原有写法里
openWordlist没有返回处理后的词汇列表,也没有把结果存到类的实例属性里,所以两个方法的数据无法互通 - 额外问题:现有
wordlist、targetURL、isVerbose都是全局变量,不符合类封装的逻辑,容易出现未定义异常
修正后完整实现代码
import sys import requests class exampleClass: # 初始化时接收必要参数,避免全局变量问题 def __init__(self, wordlist_path, target_url, is_verbose=False): self.wordlist_path = wordlist_path self.target_url = target_url self.is_verbose = is_verbose self.word_list = [] # 实例属性,跨方法共享的词汇存储容器 def openWordlist(self): try: with open(self.wordlist_path, 'r', encoding='utf-8') as file: # 把所有格式化后的非空词汇存入实例属性 self.word_list = [word.strip() for word in file if word.strip()] except FileNotFoundError: print('File does not exist') sys.exit(1) def scanDomain(self): # 遍历实例属性中存储的所有词汇发起扫描 for word in self.word_list: try: domain = f'http://{self.target_url}/{word}' r = requests.get(domain, timeout=5) if r.status_code == 200: print(f'[+] {domain}') else: if self.is_verbose: print(f'[~] {domain}') except requests.exceptions.ConnectionError: print('[!] CONNECTION ERROR! Exiting...') sys.exit(0) if __name__ == '__main__': # 初始化实例时传入你自己的字典路径、目标地址、verbose配置 obj = exampleClass( wordlist_path="your_wordlist.txt", target_url="example.com", is_verbose=True ) obj.openWordlist() obj.scanDomain()
主要改动说明
- 通过实例属性
self.word_list存储处理后的词汇列表,类内所有方法都可以直接读取该属性的内容,实现了两个方法的数据传递 - 修复了原有
scanDomain方法中的缩进错误、重复判断200状态码的冗余逻辑 - 给请求增加了timeout参数,避免无响应时长时间卡住
- 所有参数通过初始化方法传入,消除了全局变量依赖的风险
内容的提问来源于stack exchange,提问作者sunflower
相关产品推荐
相关产品推荐

