From 4acd6c6295b92ea5cb42f1dec9a07e6c5e2ec8d7 Mon Sep 17 00:00:00 2001 From: WINEZERO Date: Tue, 11 Jul 2023 07:46:00 +0800 Subject: [PATCH] v0.5.10 --- DynaScan.py | 6 +- libs/lib_args/__init__.py | 0 libs/lib_args/input_basic.py | 69 +++++++++++++++++++ libs/{ => lib_args}/input_const.py | 0 libs/{ => lib_args}/input_parse.py | 46 ++----------- libs/path_handle.py | 5 +- setting_com.py | 2 +- setting_dict.py | 2 +- setting_http.py | 2 +- ...05\345\256\271\346\225\264\347\220\206.py" | 2 +- ...04\345\210\231\346\243\200\346\237\245.py" | 2 +- 11 files changed, 83 insertions(+), 53 deletions(-) create mode 100644 libs/lib_args/__init__.py create mode 100644 libs/lib_args/input_basic.py rename libs/{ => lib_args}/input_const.py (100%) rename libs/{ => lib_args}/input_parse.py (85%) diff --git a/DynaScan.py b/DynaScan.py index cf87f00..a0a5ab0 100644 --- a/DynaScan.py +++ b/DynaScan.py @@ -3,7 +3,6 @@ import os import setting_com -from time import sleep import setting_dict import setting_http from libs.lib_dyna_rule.base_key_replace import replace_list_has_key_str @@ -21,9 +20,10 @@ from libs.lib_file_operate.file_read import read_file_to_list from libs.lib_file_operate.file_write import write_lines, write_path_list_to_frequency_file from libs.lib_log_print.logger_printer import output, LOG_INFO, set_logger, LOG_ERROR, LOG_DEBUG -from libs.input_const import * +from libs.lib_args.input_const import * from libs.lib_requests.check_protocol import check_host_list_proto, check_url_list_access -from libs.input_parse import args_parser, args_dict_handle, config_dict_add_args, config_dict_handle, show_config_dict +from libs.lib_args.input_parse import args_parser, args_dict_handle, config_dict_handle +from libs.lib_args.input_basic import config_dict_add_args from libs.util_func import analysis_ends_url, exclude_history_urls, url_to_raw_rule_classify diff --git a/libs/lib_args/__init__.py b/libs/lib_args/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/libs/lib_args/input_basic.py b/libs/lib_args/input_basic.py new file mode 100644 index 0000000..43b1c70 --- /dev/null +++ b/libs/lib_args/input_basic.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python +# encoding: utf-8 +# 解析输入参数 + +import argparse +from libs.lib_log_print.logger_printer import output, LOG_ERROR, LOG_INFO + + +def extract_heads(param_len, param_dict): + # 实现提取字符串首字母的函数,作为参数名, 需要考虑重复问题 + initials = [word[0] for word in param_len.split("_")] # 提取每个单词的首字母 + initials = "".join(initials) # 将所有首字母拼接成一个字符串 + + # 需要 param_dict 字典的值是短参数名 + if initials not in param_dict.values(): + return initials + else: + # 处理重复项问题 + i = 0 + while True: + i += 1 + new_initials = f"{initials}{i}" + if new_initials not in param_dict.values(): + break + return new_initials + + +def config_dict_add_args(config_dict, args): + # 使用字典解压将参数 直接赋值给相应的全局变量 + # 要求args参数命名要和字典的键 统一(完全相同或可以变为完全相同) + for param_name, param_value in vars(args).items(): + var_name = f"GB_{param_name.upper()}" + try: + # globals()[var_name] = param_value # 赋值全局变量,仅本文件可用 + # output(f"[*] INPUT:{var_name} -> {param_value}", level=LOG_ERROR) + config_dict[var_name] = param_value # 赋值全局字典,所有文件可用 + if var_name not in config_dict.keys(): + output(f"[-] 非预期参数将被赋值: {var_name} <--> {param_value}", level=LOG_ERROR) + except Exception as error: + output(f"[!] 更新参数发生错误: {error}", level=LOG_ERROR) + exit() + return + + +def show_config_dict(config_dict): + # 输出 config 字典 + for index, param_name in enumerate(config_dict.keys()): + param_val = config_dict[param_name] + output(f"[*] Param_{index} {param_name} <--> {param_val}", level=LOG_INFO) + + +class StoreReverse(argparse.Action): + """ + 基于默认值自动取反的动作, 如默认True,则返回false + """ + + def __init__(self, option_strings, dest, default=False, required=False, help=None): + super(StoreReverse, self).__init__( + option_strings=option_strings, + dest=dest, + nargs=0, + const=True, + default=default, + required=required, + help=help + ) + + def __call__(self, parser, namespace, values, option_string=None): + setattr(namespace, self.dest, not self.default) diff --git a/libs/input_const.py b/libs/lib_args/input_const.py similarity index 100% rename from libs/input_const.py rename to libs/lib_args/input_const.py diff --git a/libs/input_parse.py b/libs/lib_args/input_parse.py similarity index 85% rename from libs/input_parse.py rename to libs/lib_args/input_parse.py index 289865d..fd0de60 100644 --- a/libs/input_parse.py +++ b/libs/lib_args/input_parse.py @@ -1,9 +1,11 @@ # 解析输入参数 import argparse from pyfiglet import Figlet + +from libs.lib_args.input_basic import extract_heads from libs.lib_file_operate.file_path import get_sub_dirs -from libs.lib_log_print.logger_printer import output, LOG_ERROR, LOG_INFO -from libs.input_const import * +from libs.lib_log_print.logger_printer import output, LOG_ERROR +from libs.lib_args.input_const import * from libs.lib_requests.requests_const import HTTP_USER_AGENTS from libs.lib_requests.requests_tools import random_useragent, random_x_forwarded_for @@ -216,25 +218,6 @@ def options_to_argument(args_options, argument_parser, config_dict, param_dict): exit() -def extract_heads(param_len, param_dict): - # 实现提取字符串首字母的函数,作为参数名, 需要考虑重复问题 - initials = [word[0] for word in param_len.split("_")] # 提取每个单词的首字母 - initials = "".join(initials) # 将所有首字母拼接成一个字符串 - - # 需要 param_dict 字典的值是短参数名 - if initials not in param_dict.values(): - return initials - else: - # 处理重复项问题 - i = 0 - while True: - i += 1 - new_initials = f"{initials}{i}" - if new_initials not in param_dict.values(): - break - return new_initials - - def vars_to_param(var_name): # 实现全局变量到参数名的自动转换,和 config_dict_add_args中的修改过程相反 # 基于变量的值实现,要求 变量="变量", 如:GB_PROXIES="GB_PROXIES" @@ -244,25 +227,4 @@ def vars_to_param(var_name): return param_name -def config_dict_add_args(config_dict, args): - # 使用字典解压将参数 直接赋值给相应的全局变量 - # 要求args参数命名要和字典的键 统一(完全相同或可以变为完全相同) - for param_name, param_value in vars(args).items(): - var_name = f"GB_{param_name.upper()}" - try: - # globals()[var_name] = param_value # 赋值全局变量,仅本文件可用 - # output(f"[*] INPUT:{var_name} -> {param_value}", level=LOG_ERROR) - config_dict[var_name] = param_value # 赋值全局字典,所有文件可用 - if var_name not in config_dict.keys(): - output(f"[-] 非预期参数将被赋值: {var_name} <--> {param_value}", level=LOG_ERROR) - except Exception as error: - output(f"[!] 更新参数发生错误: {error}", level=LOG_ERROR) - exit() - return - -def show_config_dict(config_dict): - # 输出 config 字典 - for index, param_name in enumerate(config_dict.keys()): - param_val = config_dict[param_name] - output(f"[*] Param_{index} {param_name} <--> {param_val}", level=LOG_INFO) diff --git a/libs/path_handle.py b/libs/path_handle.py index 042b0bb..cb8a967 100644 --- a/libs/path_handle.py +++ b/libs/path_handle.py @@ -2,14 +2,13 @@ # encoding: utf-8 import os.path -from libs.input_const import * +from libs.lib_args.input_const import * from libs.lib_dyna_rule.base_key_replace import replace_list_has_key_str from libs.lib_dyna_rule.base_rule_parser import base_rule_render_list from libs.lib_dyna_rule.dyna_rule_tools import get_key_list_with_frequency -from libs.lib_dyna_rule.set_basic_var import set_base_var_dict_frequency from libs.lib_file_operate.file_path import get_dir_path_file_info_dict from libs.lib_file_operate.file_read import read_files_to_frequency_dict -from libs.lib_log_print.logger_printer import output, LOG_INFO, LOG_ERROR, LOG_DEBUG +from libs.lib_log_print.logger_printer import output, LOG_INFO, LOG_ERROR from libs.lib_url_analysis.url_handle import specify_ext_store, specify_ext_delete, replace_multi_slashes, \ remove_url_end_symbol, url_path_lowercase, url_path_chinese_encode, url_path_url_encode from libs.lib_url_analysis.url_parser import combine_urls_and_paths diff --git a/setting_com.py b/setting_com.py index 36dcfcb..dd49e15 100644 --- a/setting_com.py +++ b/setting_com.py @@ -2,7 +2,7 @@ # encoding: utf-8 from pathlib import Path import time -from libs.input_const import * +from libs.lib_args.input_const import * from libs.lib_file_operate.file_path import auto_make_dir diff --git a/setting_dict.py b/setting_dict.py index 322a248..33a6015 100644 --- a/setting_dict.py +++ b/setting_dict.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # encoding: utf-8 -from libs.input_const import * +from libs.lib_args.input_const import * from libs.lib_dyna_rule.dyna_rule_const import * diff --git a/setting_http.py b/setting_http.py index af0bed5..7276c33 100644 --- a/setting_http.py +++ b/setting_http.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # encoding: utf-8 -from libs.input_const import * +from libs.lib_args.input_const import * def init_custom(config): diff --git "a/tools_\345\255\227\345\205\270\345\206\205\345\256\271\346\225\264\347\220\206.py" "b/tools_\345\255\227\345\205\270\345\206\205\345\256\271\346\225\264\347\220\206.py" index 4ee0ee3..306caee 100644 --- "a/tools_\345\255\227\345\205\270\345\206\205\345\256\271\346\225\264\347\220\206.py" +++ "b/tools_\345\255\227\345\205\270\345\206\205\345\256\271\346\225\264\347\220\206.py" @@ -3,7 +3,7 @@ import setting_com import setting_dict import setting_http -from libs.input_const import * +from libs.lib_args.input_const import * from libs.lib_attribdict.config import CONFIG from libs.lib_file_operate.file_coding import file_encoding from libs.lib_file_operate.file_path import get_dir_path_file_info_dict diff --git "a/tools_\345\255\227\345\205\270\350\247\204\345\210\231\346\243\200\346\237\245.py" "b/tools_\345\255\227\345\205\270\350\247\204\345\210\231\346\243\200\346\237\245.py" index 70c953f..7b83bee 100644 --- "a/tools_\345\255\227\345\205\270\350\247\204\345\210\231\346\243\200\346\237\245.py" +++ "b/tools_\345\255\227\345\205\270\350\247\204\345\210\231\346\243\200\346\237\245.py" @@ -5,7 +5,7 @@ import setting_com import setting_dict import setting_http -from libs.input_const import * +from libs.lib_args.input_const import * from libs.lib_attribdict.config import CONFIG from libs.lib_dyna_rule.base_rule_parser import RuleParser from libs.lib_file_operate.file_path import get_dir_path_file_info_dict, file_name_remove_ext_list, \