Skip to content

[1.5.2 Patch] 端口检测全面增强:识别准确性、详情解释、风险分级、历史记录与项目端口联动收口 #66

Description

@weidonglang

背景

已有 issue #59 聚焦“Steam/QQ 占用 8080/8082 被误判为 Spring/Tomcat”的具体问题。本 issue 进一步作为端口检测的全面增强任务,但仍然坚持:不新增新的产品方向,只强化现有端口管理功能的准确性、解释性、安全性和可用性。

用户反馈说明端口管理本身有价值,但当前体验容易出现:

  • 识别依赖端口号,误判应用类型。
  • 详情解释不够充分。
  • 风险等级不够精确。
  • LISTENING 与 ESTABLISHED 区分不够明显。
  • 对结束进程的安全提示还可以更强。
  • 项目端口配置与端口占用之间的联动还可以更清楚。

目标

全面强化现有端口管理:

扫描更可靠
识别更准确
证据更清楚
风险更保守
操作更安全
历史更有用
项目端口联动更直观

不新增新模块,不把端口管理扩展成网络监控软件。

一、端口扫描数据完整性

端口记录应尽量包含:

  • 协议。
  • 本地地址。
  • 本地端口。
  • 远程地址。
  • 状态。
  • PID。
  • 进程名。
  • 进程路径。
  • commandLine。
  • 父进程 PID。
  • 父进程名。
  • Windows 服务名。
  • 用户名,如可安全获取。
  • 启动时间,如可安全获取。
  • 识别结论。
  • 识别证据。
  • 置信度。
  • 风险等级。
  • 建议操作。

字段缺失时不能导致 UI 崩溃,应显示“未读取 / 权限不足 / 系统未返回”。

二、识别规则增强

1. process-first

端口用途识别优先级:

进程名 > 进程路径 > commandLine > Windows 服务名 > 项目配置证据 > 端口号启发式

端口号只能作为弱证据,不能单独作为强结论。

2. 开发服务识别

Spring / Spring Boot:

  • java.exe / javaw.exe
  • commandLine 包含 springspring-bootbootRun.jar
  • 项目配置命中 server.port
  • Maven / Gradle 启动命令证据。

Tomcat:

  • commandLine 包含 tomcatcatalina
  • 进程路径在 Tomcat 目录。
  • Windows 服务名包含 Tomcat。

前端开发服务:

  • node.exe
  • commandLine 包含 vitewebpacknextnuxtreact-scriptsastrodev
  • 项目配置命中 Vite / package.json scripts。

数据库:

  • MySQL / PostgreSQL / Redis / MongoDB / Elasticsearch / SQL Server 必须结合进程名、服务名或路径。
  • 不允许仅凭端口号认定数据库。

3. 普通桌面应用识别

以下进程应优先识别为桌面客户端或 WebView 组件,不应误判为开发服务:

steamwebhelper.exe
steam.exe
QQ.exe
WeChat.exe
chrome.exe
msedge.exe
firefox.exe
Code.exe
Discord.exe
Telegram.exe
OneDrive.exe
BaiduNetdisk.exe

三、状态解释增强

明确区分:

LISTENING:本机进程正在监听端口,可能阻塞开发服务启动。
ESTABLISHED:已有连接,不等同于本机监听端口。
TIME_WAIT / CLOSE_WAIT:连接状态,不应当作端口占用服务。
UDP:无连接状态,解释方式不同。

UI 中不要把 ESTABLISHED 连接当成“端口被服务占用”的强结论。

四、风险分级增强

建议风险分级:

低风险:用户明确启动的开发服务,如 vite、spring boot dev server。
普通:普通桌面应用、浏览器、聊天工具、游戏平台。
谨慎:数据库、本地服务、IDE、构建任务、下载任务。
高风险:系统服务、权限不足进程、未知路径进程、关键 Windows 进程。
阻止:系统关键进程、杀毒/安全软件、Windows 核心服务。

结束进程前必须显示:

  • 进程名。
  • PID。
  • 路径。
  • commandLine 摘要。
  • 服务名。
  • 风险等级。
  • 可能影响。
  • 是否建议结束。

五、搜索与筛选增强

现有搜索框继续保留,但要确保支持:

  • 端口号。
  • PID。
  • 进程名。
  • 进程路径。
  • commandLine。
  • 状态。
  • 风险等级。
  • 识别标签。
  • 服务名。

快捷筛选项应与识别规则一致,不要只靠端口号筛选到 Spring/Tomcat。

六、详情面板增强

点击详情时展示:

基本信息
进程信息
服务信息
识别结论
识别证据
置信度
风险说明
是否建议结束
关联项目配置,如有
最近 7 天历史,如有

对于低置信度识别,要明确写:

当前只有端口号证据,不足以判断为某类开发服务。

七、项目端口联动增强

如果当前已经分析过项目,则端口管理可以显示:

  • 当前项目配置端口。
  • 是否被占用。
  • 占用进程是否属于当前项目。
  • 如果不是当前项目,提示冲突。
  • 修改项目端口前必须备份文件。

不要新增新项目类型,只强化现有项目端口配置联动。

八、历史记录增强

最近 7 天历史应更有用:

  • 同一端口最近被哪些进程占用。
  • 最后一次出现时间。
  • 出现次数。
  • 是否经常被同一个桌面应用占用。

历史记录不应保存敏感 commandLine 全量内容;如保存,应脱敏用户目录和 token。

九、安全边界

  • 不新增抓包功能。
  • 不新增网络流量监控。
  • 不新增防火墙管理。
  • 不自动结束进程。
  • 不自动改项目端口。
  • 不记录敏感命令行参数。
  • 不上传任何端口数据。

十、测试要求

新增测试或 mock 场景:

  • steamwebhelper.exe + 8080 识别为 Steam WebView,而不是 Spring/Tomcat。
  • QQ.exe + 8082 识别为 QQ 客户端,而不是 Spring/Tomcat。
  • java.exe + spring boot commandLine 识别为 Spring Boot。
  • java.exe + catalina commandLine 识别为 Tomcat。
  • node.exe + vite commandLine 识别为 Vite。
  • mysqld.exe + 3306 识别为 MySQL。
  • 非数据库进程 + 3306 不应强判为 MySQL。
  • ESTABLISHED 状态不显示为本地监听服务。
  • 权限不足字段缺失时 UI 不崩溃。
  • 结束高风险进程前必须强提示或阻止。

十一、文档更新

更新:

  • docs/troubleshooting.md
  • docs/user-guide.md
  • docs/release-v1.5.2.md
  • docs/issues-57-66.md

说明:

  • 端口识别不是只看端口号。
  • 为什么 Steam/QQ/浏览器可能占用 8080/8082。
  • 如何判断能不能结束进程。
  • LISTENING 与 ESTABLISHED 的区别。

验收标准

  • 端口识别明显减少误判。
  • 端口详情能说明证据和置信度。
  • 风险分级更保守。
  • 结束进程前提示更清楚。
  • 项目端口冲突能更直观解释。
  • cargo test --all-targets 通过。
  • npm run build 通过。
  • 不新增系统级网络监控功能。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions