如何实现:Nmap扫描端口为filtered/closed时终止Python脚本
实现Nmap端口扫描异常状态时终止脚本
先修正原代码的两处问题:一是导入语句拼写错误(#iimport → #import),二是IP地址作为字典键时需用字符串格式(否则会触发语法错误)。在此基础上,添加状态判断与脚本终止逻辑,具体实现如下:
# import nmap library import nmap import sys # 导入sys模块用于终止脚本 # 定义扫描目标 target_ip = '10.129.223.105' target_ports = ['111', '2049'] # 用字符串列表存储端口,适配nmap扫描格式 # create scanner scanner = nmap.PortScanner() # scan ip and ports scanner.scan(target_ip, ','.join(target_ports)) # 遍历检查每个端口状态 for port in target_ports: port_num = int(port) # 先确认tcp协议及对应端口的扫描结果存在,避免触发KeyError if 'tcp' not in scanner[target_ip] or port_num not in scanner[target_ip]['tcp']: print(f"Port {port} 未扫描到结果,终止脚本") sys.exit(1) port_state = scanner[target_ip]['tcp'][port_num]['state'] print(f'Port {port} Status: {port_state}') # 状态为filtered或closed时终止脚本 if port_state in ['filtered', 'closed']: print(f"端口 {port} 状态为 {port_state},终止脚本") sys.exit(1) # 所有端口状态均为open时,执行后续逻辑 print("所有目标端口状态正常,继续执行后续操作...") # 此处可添加你需要的后续代码
关键逻辑说明
- 导入sys模块:通过
sys.exit(1)实现脚本异常终止,参数1用于区分正常退出(0)与异常退出。 - 统一管理目标端口:用列表存储端口,后续扩展或修改更方便,扫描时通过
','.join()转换为nmap支持的格式。 - 结果存在性检查:避免因扫描无结果(如端口未开放且无响应)触发字典键不存在的报错。
- 状态判断逻辑:遍历每个端口,一旦发现
filtered或closed状态,立即打印提示并终止脚本;只有所有端口均为open时,才会执行后续代码。
内容的提问来源于stack exchange,提问作者Chead1988
相关产品推荐
相关产品推荐

