端口扫描器开发问题:get_port函数返回None值求助
端口扫描器get_port函数返回None的问题分析与修复
问题描述
开发端口扫描器时,get_port函数始终返回None,调试发现执行完port_is_valid函数后直接跳转到代码末尾,无法进入后续的端口处理逻辑。
原代码
import re import termcolor port_regex = re.compile(r'^\d{1,5}$|^\d{1,5}-\d{1,5}|\d{1,5}(,\d{1,5})*$') def port_is_valid(port): result = bool(port_regex.match(port)) print(result) def get_port(): str_ports = input(termcolor.colored("Specify The Ports: ", "light_cyan")) print(str_ports) if port_is_valid(str_ports): if "," in str_ports: nm_ports = str_ports.split(",") int_ports = [int(port) for port in nm_ports] print("sp") return int_ports elif "-" in str_ports: f_ports = [] nm_ports = str_ports.split("-") if int(nm_ports[0]) > int(nm_ports[1]): print(termcolor.colored("order of ports range is not correct !!!", "red")) get_port() return None else: for port in range(int(nm_ports[0]), int(nm_ports[1]) + 1): f_ports.append(port) print("rg") return f_ports else: try: int_port = int(str_ports) return int_port except ValueError: print("Invalid port format") return None # Return None for invalid single port port_t = get_port()
问题原因
- port_is_valid函数无返回值:该函数仅计算了验证结果并打印,但没有通过
return返回结果,导致调用port_is_valid(str_ports)时永远得到None,if条件不成立,直接跳过所有端口处理分支,函数最终返回默认的None。 - 递归调用结果被丢弃:当端口范围顺序错误时,递归调用
get_port()后直接return None,新调用返回的有效端口列表被丢弃,仍然返回None。
修复后的代码
import re import termcolor port_regex = re.compile(r'^\d{1,5}$|^\d{1,5}-\d{1,5}|\d{1,5}(,\d{1,5})*$') def port_is_valid(port): result = bool(port_regex.match(port)) print(result) return result # 添加返回语句 def get_port(): str_ports = input(termcolor.colored("Specify The Ports: ", "light_cyan")) print(str_ports) if port_is_valid(str_ports): if "," in str_ports: nm_ports = str_ports.split(",") int_ports = [int(port) for port in nm_ports] print("sp") return int_ports elif "-" in str_ports: f_ports = [] nm_ports = str_ports.split("-") if int(nm_ports[0]) > int(nm_ports[1]): print(termcolor.colored("order of ports range is not correct !!!", "red")) return get_port() # 返回递归调用的结果,而非None else: for port in range(int(nm_ports[0]), int(nm_ports[1]) + 1): f_ports.append(port) print("rg") return f_ports else: try: int_port = int(str_ports) return int_port except ValueError: print("Invalid port format") return None # 单端口格式错误时返回None port_t = get_port()
内容的提问来源于stack exchange,提问作者ali eltaib
相关产品推荐
相关产品推荐

