背景
已有 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 包含
spring、spring-boot、bootRun、.jar。
- 项目配置命中
server.port。
- Maven / Gradle 启动命令证据。
Tomcat:
- commandLine 包含
tomcat、catalina。
- 进程路径在 Tomcat 目录。
- Windows 服务名包含 Tomcat。
前端开发服务:
node.exe。
- commandLine 包含
vite、webpack、next、nuxt、react-scripts、astro、dev。
- 项目配置命中 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 通过。
- 不新增系统级网络监控功能。
背景
已有 issue #59 聚焦“Steam/QQ 占用 8080/8082 被误判为 Spring/Tomcat”的具体问题。本 issue 进一步作为端口检测的全面增强任务,但仍然坚持:不新增新的产品方向,只强化现有端口管理功能的准确性、解释性、安全性和可用性。
用户反馈说明端口管理本身有价值,但当前体验容易出现:
目标
全面强化现有端口管理:
不新增新模块,不把端口管理扩展成网络监控软件。
一、端口扫描数据完整性
端口记录应尽量包含:
字段缺失时不能导致 UI 崩溃,应显示“未读取 / 权限不足 / 系统未返回”。
二、识别规则增强
1. process-first
端口用途识别优先级:
端口号只能作为弱证据,不能单独作为强结论。
2. 开发服务识别
Spring / Spring Boot:
java.exe/javaw.exe。spring、spring-boot、bootRun、.jar。server.port。Tomcat:
tomcat、catalina。前端开发服务:
node.exe。vite、webpack、next、nuxt、react-scripts、astro、dev。数据库:
3. 普通桌面应用识别
以下进程应优先识别为桌面客户端或 WebView 组件,不应误判为开发服务:
三、状态解释增强
明确区分:
UI 中不要把 ESTABLISHED 连接当成“端口被服务占用”的强结论。
四、风险分级增强
建议风险分级:
结束进程前必须显示:
五、搜索与筛选增强
现有搜索框继续保留,但要确保支持:
快捷筛选项应与识别规则一致,不要只靠端口号筛选到 Spring/Tomcat。
六、详情面板增强
点击详情时展示:
对于低置信度识别,要明确写:
七、项目端口联动增强
如果当前已经分析过项目,则端口管理可以显示:
不要新增新项目类型,只强化现有项目端口配置联动。
八、历史记录增强
最近 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。十一、文档更新
更新:
docs/troubleshooting.mddocs/user-guide.mddocs/release-v1.5.2.mddocs/issues-57-66.md说明:
验收标准
cargo test --all-targets通过。npm run build通过。