深入剖析 Windows 网络服务:用 witr 一键溯源所有监听端口
在 Windows 系统管理中,我们常常需要知道"哪个进程在监听这个端口?"、"这个服务是怎么启动的?"、"它为什么在运行?"。传统的 netstat 只能告诉你 PID,而任务管理器只能看到进程名,要理清进程的来龙去脉,往往需要手动追踪父进程、查阅服务配置,过程繁琐且容易遗漏。
witr(What Is This Running?)正是为解决这一问题而生的轻量级命令行工具。它能够递归追踪进程的祖先链,展示完整的启动路径、服务信息、网络监听详情,并标记可疑特征,让复杂的进程溯源变得一目了然。
本文将通过一个真实的批量分析案例,带你全面掌握 witr 的应用,学会如何快速审计 Windows 系统上所有监听端口的进程。
一、witr 核心功能速览
witr 是一个跨平台的开源工具(支持 Windows、Linux、macOS),其核心功能包括:
- 按进程名/PID/端口/文件查询:灵活定位目标。
- 显示进程详细信息:用户、服务名、命令行、启动时间、工作目录。
- 递归追踪启动链 :从目标进程一路追溯到系统初始化进程(如
wininit),清晰展示父子关系。 - 列出所有监听地址:包括 IPv4 和 IPv6,以及具体接口。
- 生成安全警告:如"监听在公网接口"、"服务名与进程名不匹配"、"无已知父进程"等。
- 支持多种输出格式:普通文本、JSON、树形结构,便于集成到脚本中。
二、准备工作:安装与批量分析脚本
本文使用的环境是 Windows,已下载 witr-windows-amd64.exe。为了全面审计系统中所有监听端口,我们编写了一个 PowerShell 脚本,它利用 netstat 提取所有处于 LISTENING 状态的端口,然后对每个端口执行 witr -o <port>。
powershell
# 获取所有监听端口的端口号(去重)
$ports = netstat -ano | Select-String "LISTENING" | ForEach-Object {
if ($_ -match "\[.*\]:(\d+)|(\d+\.\d+\.\d+\.\d+):(\d+)") {
if ($matches[1]) { $matches[1] } else { $matches[3] }
}
} | Sort-Object -Unique
# 对每个端口执行 witr -o
foreach ($port in $ports) {
Write-Host "`n===== 分析端口 $port =====" -ForegroundColor Cyan
& "C:\Users\Administrator\Downloads\witr-windows-amd64\witr.exe" -o $port
}
运行该脚本后,我们得到了数十个端口的详细分析结果。下面我们挑选几个典型实例进行解读。
三、典型案例解读
1. 系统核心服务:RPC 端口 135
===== 分析端口 135 =====
Target : svchost.exe
Process : svchost.exe (pid 1316)
User : NT AUTHORITY\NETWORK SERVICE
Service : RpcEptMapper
Command : C:\Windows\system32\svchost.exe -k RPCSS -p
Started : 3 hours ago (Fri 2026-02-20 14:22:36 +08:00)
Why It Exists :
wininit.exe (pid 8) → services.exe (pid 976) → svchost.exe (pid 1316)
Source : RpcEptMapper (windows_service)
Registry Key : HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapper
Listening : 0.0.0.0:135, [::]:135
Warnings :
• Process is listening on a public interface
• Service name and process name do not match
解读:
- Target/Process :进程名为
svchost.exe,PID 1316,这是 Windows 的标准服务宿主进程。 - User :运行在
NETWORK SERVICE账户下,权限适中,符合 RPC 服务的需求。 - Service :服务名为
RpcEptMapper(RPC 终结点映射器),这是 Windows 的核心服务之一。 - Command :启动命令为
svchost.exe -k RPCSS -p,表明它属于RPCSS服务组。 - Why It Exists :启动链为
wininit→services→svchost,这是标准的 Windows 服务启动路径,无异常。 - Listening:监听在所有接口的 135 端口,这是 RPC 服务的默认端口。
- Warnings :
- "监听在公共接口":由于 RPC 服务需要对外提供服务(如远程管理),这属于正常现象,但如果机器暴露在公网,建议通过防火墙限制。
- "服务名与进程名不匹配":
svchost.exe承载多个服务,服务名是RpcEptMapper,进程名是svchost.exe,这是合理的。
结论:该进程是合法的 Windows 系统服务,无需担忧。
2. PID 4 的特殊进程:System
===== 分析端口 445 =====
Target :
Process : (pid 4)
Command :
Started : 3 hours ago (Fri 2026-02-20 14:22:30 +08:00)
Why It Exists :
(pid 4)
Source : unknown
Listening : 0.0.0.0:445, 0.0.0.0:5357, ... (多个端口)
Warnings :
• Process is listening on a public interface
• No known supervisor or service manager detected
解读:
- PID 4 是 Windows 的 System 进程(即内核进程),它本身不是一个普通的用户态进程,因此 witr 无法获取其命令、启动链等详细信息。
- 它监听了多个端口:445(SMB)、5357(网络发现)、5985(WinRM)、47001(WinRM 服务)等。这些都是 Windows 内置功能使用的端口,由内核或驱动直接处理,没有对应的用户态服务名。
- 警告"No known supervisor"是正常的,因为 System 进程由内核初始化,不在服务管理器管理范围内。
结论:PID 4 的监听都是 Windows 核心功能,无需干预。但同样,如果不需要 SMB 等服务,建议在防火墙中限制。
3. 第三方软件:Acunetix 漏洞扫描器
Acunetix 是一个 Web 漏洞扫描工具,它在系统中启动了多个进程,分别监听不同端口。我们来看几个典型:
(1) Acunetix Web 控制台(端口 3443)
===== 分析端口 3443 =====
Target : opsrv.exe
Process : opsrv.exe (pid 7900)
User : NT AUTHORITY\SYSTEM
Command : "C:\Program Files (x86)\Acunetix\25.1.250204093\opsrv.exe" --conf C:\ProgramData\Acunetix\settings.ini
Started : 3 hours ago (Fri 2026-02-20 14:22:38 +08:00)
Why It Exists :
wininit.exe (pid 8) → services.exe (pid 976) → supervisor.exe (pid 4480) → opsrv.exe (pid 7900)
Source : supervisord (supervisor)
Working Dir : C:\Program Files (x86)\Acunetix\25.1.250204093\
Listening : 0.0.0.0:3443
Warnings : • Process is listening on a public interface
解读:
- 进程 :
opsrv.exe是 Acunetix 的主服务进程。 - 启动链 :由
supervisor.exe启动,而supervisor.exe本身是由services.exe启动的。这表明 Acunetix 使用了进程管理工具(supervisord)来管理其组件。 - 监听:3443 端口通常用于 HTTPS 管理界面,监听在所有接口,意味着可以从网络访问该控制台。
- 警告:监听在公共接口。如果该机器是内部扫描服务器,且网络环境安全,可以接受;否则建议通过防火墙限制访问 IP。
(2) Acunetix 数据库(端口 35432)
===== 分析端口 35432 =====
Target : postgres.exe
Process : postgres.exe (pid 6080)
User : NT AUTHORITY\LOCAL SERVICE
Command : "C:\Program Files (x86)\Acunetix\pg\bin\postgres.exe" -D "C:\ProgramData\Acunetix\db"
Started : 3 hours ago
Why It Exists :
wininit.exe → services.exe → pg_ctl.exe (pid 4488) → postgres.exe (pid 6080)
Source : Acunetix Database (windows_service)
Registry Key : HKLM\SYSTEM\CurrentControlSet\Services\Acunetix Database
Listening : 127.0.0.1:35432, [::1]:35432
解读:
- 进程:PostgreSQL 数据库进程,用于存储扫描数据。
- 用户 :
LOCAL SERVICE账户,权限受限,符合数据库服务的最佳实践。 - 监听:仅监听在本地回环地址(127.0.0.1 和 ::1),外部无法直接访问,安全性较高。
- 无警告:这说明其配置合理。
(3) Acunetix 消息队列(端口 4222)
===== 分析端口 4222 =====
Target : nats-server.exe
Process : nats-server.exe (pid 7868)
User : NT AUTHORITY\SYSTEM
Command : "C:\Program Files (x86)\Acunetix\broker\nats-server.exe" -c "C:\Program Files (x86)\Acunetix\broker\nats-server.conf"
Started : 3 hours ago
Why It Exists :
wininit.exe → services.exe → supervisor.exe (pid 4480) → nats-server.exe (pid 7868)
Source : supervisord (supervisor)
Listening : 127.0.0.1:4222
解读:
- NATS 是一个轻量级消息系统,用于 Acunetix 内部组件通信。
- 监听在本地回环,安全。
(4) Acunetix 传感器桥接(端口 7880)
===== 分析端口 7880 =====
Target : sensor-bridge.exe
Process : sensor-bridge.exe (pid 11524)
User : NT AUTHORITY\SYSTEM
Command : "C:\Program Files (x86)\Acunetix\25.1.250204093\data\acusensor\sensor-bridge.exe" --ssl-cert ... --interface 0.0.0.0 --port 7880
Started : 3 hours ago
Why It Exists :
wininit.exe → services.exe → supervisor.exe → opsrv.exe → sensor-bridge.exe (pid 11524)
Source : supervisord (supervisor)
Listening : 0.0.0.0:7880
Warnings : • Process is listening on a public interface
解读:
- 传感器桥接进程,用于与外部扫描传感器通信,监听在所有接口(0.0.0.0)。这可能意味着它可以接受来自网络的连接,需要确保网络访问控制得当。
4. 媒体播放器:恒星播放器(StellarPlayer)
===== 分析端口 1995 =====
Target : StellarPlayer.exe
Process : StellarPlayer.exe (pid 9852)
User : LENOVO-LXW\Administrator
Command : "D:\StellarPlayer\StellarPlayer.exe" "C:\Users\Administrator\Desktop\优雅华尔兹马年新春祝福.mp4"
Started : 3 hours ago
Why It Exists :
StellarPlayer.exe (pid 9852)
Source : unknown
Working Dir : D:\StellarPlayer\
Listening : 0.0.0.0:1995, 0.0.0.0:49996, 127.0.0.1:59927, 以及多个 IP 上的 59927
Warnings :
• Process is listening on a public interface
• No known supervisor or service manager detected
解读:
- 进程 :
StellarPlayer.exe是一款本地媒体播放器,但为什么它会监听多个网络端口?从命令看,它正在播放一个本地视频文件,却打开了 1995、49996、59927 等多个端口,且监听在所有接口上(包括公网 IP)。 - 启动链:没有父进程,说明是用户直接启动的(可能是双击桌面图标)。
- 来源:unknown,表示不是通过服务管理器启动。
- 警告:两个警告都非常重要------监听在公网接口,且没有明确的管理器。媒体播放器监听端口通常是为了 DLNA、AirPlay 或远程控制功能,但若用户不需要这些功能,建议在软件设置中禁用网络服务,或通过防火墙阻止这些端口。
进一步检查 :我们看到还有一个子进程 StellarMediaServer.exe(PID 2484)也在监听 49952 端口,且是由 StellarPlayer.exe 启动的,这证实了播放器启动了媒体服务器组件。
安全建议:如果不需要将本机媒体共享到网络,应检查播放器设置,关闭"允许远程控制"或"DLNA 服务"等选项,或使用 Windows 防火墙阻止这些端口的入站连接。
5. VMware 授权服务(端口 902、912)
===== 分析端口 902 =====
Target : vmware-authd.exe
Process : vmware-authd.exe (pid 4788)
User : NT AUTHORITY\SYSTEM
Service : VMAuthdService
Command : "C:\Program Files (x86)\VMware\VMware Workstation\vmware-authd.exe"
Started : 3 hours ago
Why It Exists :
wininit.exe → services.exe → vmware-authd.exe
Source : VMAuthdService (windows_service)
Listening : 0.0.0.0:902, 0.0.0.0:912
Warnings : • Process is listening on a public interface
• Service name and process name do not match
解读:
- VMware 授权服务,用于虚拟机身份验证。默认监听 902 和 912 端口。
- 启动链正常,服务注册表也存在。
- 警告"监听在公网接口"意味着如果主机连接了公网,这些端口可能被扫描。通常这些端口只在本地网络使用,建议在虚拟网络编辑器或防火墙中限制访问来源。
6. OpenSSH 服务器(端口 22)
===== 分析端口 22 =====
Target : sshd.exe
Process : sshd.exe (pid 4668)
User : NT AUTHORITY\SYSTEM
Service : sshd
Command : C:\Windows\System32\OpenSSH\sshd.exe
Started : 3 hours ago
Why It Exists :
wininit.exe → services.exe → sshd.exe
Source : sshd (windows_service)
Listening : 0.0.0.0:22, [::]:22
Warnings : • Process is listening on a public interface
• Service name and process name do not match
解读:
- Windows 自带的 OpenSSH 服务器,以 SYSTEM 权限运行。
- 监听在所有接口,意味着可以从任何地方 SSH 登录。如果你确实需要远程管理,建议使用密钥认证并禁用密码登录,或配置防火墙只允许特定 IP。
四、witr 输出字段详解
通过以上案例,我们可以总结出 witr 输出的各个字段的含义:
| 字段 | 说明 |
|---|---|
| Target | 查询的目标(进程名或端口) |
| Process | 实际进程名称及 PID |
| User | 运行该进程的用户账户 |
| Service | 对应的 Windows 服务显示名(如果是以服务形式运行) |
| Command | 完整的启动命令行 |
| Started | 进程启动时间 |
| Why It Exists | 父进程链,从最顶层到当前进程 |
| Source | 进程的来源(如 windows_service、supervisor、unknown) |
| Registry Key | 如果是服务,显示其在注册表中的路径 |
| Working Dir | 进程的工作目录 |
| Listening | 该进程监听的地址和端口列表 |
| Warnings | 启发式安全警告 |
五、常见警告及其含义
-
Process is listening on a public interface
进程监听在
0.0.0.0或公网 IP 上,意味着任何能访问该 IP 的人都可以尝试连接。根据具体服务判断是否需要限制。 -
Service name and process name do not match
服务名与进程文件名不一致,这在
svchost等宿主进程中非常常见,可以忽略;但如果是一个独立进程,可能需要确认是否伪装。 -
No known supervisor or service manager detected
进程不是通过服务管理器或常见 supervisor 启动的,通常是用户直接运行的程序,需要留意其来源。
-
Process has no listening endpoints
进程没有监听任何端口,说明它只是客户端或后台工作进程,不提供网络服务。
六、批量分析的价值与后续行动
通过上述批量脚本,我们只需几分钟就能全面掌握系统上所有网络服务的"底细"。你可以:
- 识别未知或可疑服务:如果某个端口对应一个你不认识的进程,且没有合法的公司签名,可以进一步调查。
- 检查安全配置:对于监听在公网接口的进程,评估是否需要限制访问。
- 发现软件残留:卸载软件后可能仍有进程在运行,可以通过 witr 定位并手动终止。
- 审计开机启动项:结合启动链,判断是否有恶意软件通过服务或计划任务持久化。
后续建议:
- 将输出保存到文件(如
witr_audit.txt)供日后对比。 - 对每个带警告的进程,逐一核实其必要性,并采取相应措施(如防火墙规则、禁用服务)。
- 定期运行此脚本,监控系统变化。
七、总结
witr 是一款简单而强大的进程溯源工具,它通过递归追踪父子关系,将零散的进程信息整合成清晰的报告。结合 PowerShell 脚本,我们可以轻松地对整个系统的网络服务进行全面审计,无论是系统管理员还是安全分析师,都能从中受益。
通过本文的实例,你应该已经掌握了 witr 的基本用法和输出解读技巧。希望你能将它纳入日常工具箱,让 Windows 进程管理变得更加透明、可控。
项目地址 :https://github.com/pranshuparmar/witr
下载页面:https://github.com/pranshuparmar/witr/releases