You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

端口扫描器开发问题: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()

问题原因

  1. port_is_valid函数无返回值:该函数仅计算了验证结果并打印,但没有通过return返回结果,导致调用port_is_valid(str_ports)时永远得到None,if条件不成立,直接跳过所有端口处理分支,函数最终返回默认的None。
  2. 递归调用结果被丢弃:当端口范围顺序错误时,递归调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 08:46:21