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

如何实现: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("所有目标端口状态正常,继续执行后续操作...")
# 此处可添加你需要的后续代码

关键逻辑说明

  1. 导入sys模块:通过sys.exit(1)实现脚本异常终止,参数1用于区分正常退出(0)与异常退出。
  2. 统一管理目标端口:用列表存储端口,后续扩展或修改更方便,扫描时通过','.join()转换为nmap支持的格式。
  3. 结果存在性检查:避免因扫描无结果(如端口未开放且无响应)触发字典键不存在的报错。
  4. 状态判断逻辑:遍历每个端口,一旦发现filtered或closed状态,立即打印提示并终止脚本;只有所有端口均为open时,才会执行后续代码。

内容的提问来源于stack exchange,提问作者Chead1988

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 00:16:12