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

为什么基于Python的nmap扫描器无法在discord.py(dpy)中正常运行?

修复方案
  • 首先修复异常捕获逻辑
    你当前使用的空except:会吞掉所有类型的错误,包括nmap不存在、扫描超时、权限不足、KeyError等所有异常,全部被当成「无效IP」处理,自然看不到任何报错。先把异常捕获改成可以打印具体错误的版本,方便排查:
# 先导入traceback模块
import traceback

# 把原代码的except块替换为以下内容
except Exception as e:
    print(f"扫描出错:{e}")
    traceback.print_exc() # 打印完整错误栈
    embed = discord.Embed(color=000000, timestamp=ctx.message.created_at)
    embed.set_author(name="Occult AutoBot Revamped")
    embed.add_field(name='扫描失败',value=f"错误原因:{str(e)}", inline=True)
    await ctx.send(embed=embed, delete_after = 10)
  • 检查系统nmap运行环境
    Python的nmap库只是对系统原生nmap程序的封装,你需要先在运行bot的设备上安装nmap主程序,仅安装Python依赖包无法正常运行功能:
    • Windows:下载nmap安装包完成安装后,把nmap的安装目录加到系统环境变量PATH中,重启终端后执行nmap --version验证可以正常输出
    • Debian/Ubuntu:执行apt install nmap
    • CentOS/RHEL:执行yum install nmap
    • MacOS:执行brew install nmap
  • 优化扫描逻辑避免超时和阻塞
    你当前扫描1-65535全端口的默认模式需要数分钟时间,远超过discord.py默认的30秒命令超时时间,且同步调用nmScan.scan会阻塞整个bot的事件循环,导致bot无响应。可以做以下优化:
    1. 给扫描添加超时参数,并且开启快速扫描模式,先限制扫描常用端口,缩短耗时:nmScan.scan(arg, '1-1000', arguments='-T4 -F --host-timeout 10s')
    2. 把扫描逻辑放到异步线程池中执行,避免阻塞事件循环,参考修改代码:
    import asyncio
    
    # 在try块里替换原有的同步扫描逻辑
    loop = asyncio.get_event_loop()
    await loop.run_in_executor(None, lambda: nmScan.scan(arg, '1-1000', arguments='-T4 -F --host-timeout 10s'))
    
  • 修复边界逻辑漏洞
    当目标IP有效但没有开放任何TCP端口时,直接访问nmScan[arg]['tcp']会抛出KeyError,需要提前判断是否存在tcp字段:
if 'tcp' in nmScan[arg]:
    tcp_ports = nmScan[arg]['tcp'].keys()
    for i in tcp_ports:
        embed.add_field(name='Open TCP Port',value=str(i), inline=True)
else:
    embed.add_field(name='TCP端口状态',value="未发现开放的TCP端口", inline=True)
  • 检查运行权限
    部分nmap扫描参数需要管理员/root权限才能运行,如果使用到相关参数需要以对应权限运行bot程序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:36:03