不同系统查看软件占用端口的方式
Windows
使用命令提示符(CMD)
-
打开命令提示符:
- 按
Win + R
键打开“运行”对话框,输入cmd
并按回车。为了执行某些命令,您可能需要以管理员身份运行命令提示符。可以通过右键点击“开始”按钮并选择“命令提示符(管理员)”或“Windows PowerShell(管理员)”。
- 按
-
执行
netstat
命令:- 输入以下命令并按回车键:
netstat -ano
- 解释输出:
- Proto: 协议类型(TCP 或 UDP)
- Local Address: 本地地址和端口(格式为 IP:端口号)。如果显示为
0.0.0.0:端口号
或*:端口号
,则表示该端口在所有可用的IP地址上监听。 - Foreign Address: 远程地址和端口(对于监听状态,这通常显示为
0.0.0.0:0
或*:端口号
) - State: 连接状态(例如 LISTENING, ESTABLISHED 等)
- PID: 进程ID
- 输入以下命令并按回车键:
-
查找特定端口:
- 如果你知道要查找的端口号,可以在命令后添加
| findstr :<端口号>
来过滤输出。例如,查找端口8080的使用情况:netstat -ano | findstr :8080
- 如果你知道要查找的端口号,可以在命令后添加
-
确定进程名称:
- 一旦你有了PID,你可以通过任务管理器来查找对应的进程名称。或者直接在命令行中使用
tasklist
命令加上/FI "PID eq <PID>"
参数,如:tasklist /FI "PID eq 1234"
- 一旦你有了PID,你可以通过任务管理器来查找对应的进程名称。或者直接在命令行中使用
-
使用资源监视器:
- 打开资源监视器(可以通过任务管理器的性能标签下的链接打开),在网络选项卡下查看网络活动。资源监视器不仅显示了当前的网络连接,还提供了与这些连接相关的进程和服务的信息。
-
使用PowerShell:
- PowerShell提供了更强大的命令,比如
Get-NetTCPConnection
和Get-Process
。可以组合使用这两个命令来获取更详细的输出。例如:Get-NetTCPConnection | Where-Object State -eq Listen | Select-Object LocalPort, OwningProcess | ForEach-Object { $_; Get-Process -Id $_.OwningProcess }
- PowerShell提供了更强大的命令,比如
高级技巧
-
使用防火墙规则:
- 您可以利用Windows Defender Firewall创建入站和出站规则来限制特定端口的访问。通过控制面板或Windows设置中的防火墙和网络保护选项配置规则。
-
日志文件分析:
- 某些应用程序会在日志文件中记录它们使用的端口信息。您可以检查应用程序的日志文件以了解其行为。
-
服务管理:
- 使用
sc query
命令查询服务状态,结合sc config
修改服务启动参数。例如,更改服务启动类型或路径。
- 使用
macOS
使用终端
-
打开终端:
- 打开Finder,前往“应用程序 > 实用工具”,然后双击打开“终端”。
-
使用
lsof
:- 可以使用以下命令来查看监听的端口及相应的程序:
sudo lsof -i -P | grep LISTEN
- 若要查找特定端口,可以将上述命令与
grep
结合使用,如:sudo lsof -i :8080
- 可以使用以下命令来查看监听的端口及相应的程序:
-
解释输出
- 输出包含多个字段,其中重要的是:
- COMMAND: 启动服务的命令名
- PID: 进程ID
- USER: 运行该进程的用户
- FD: 文件描述符(通常是
IPv4
或IPv6
) - TYPE: 文件类型(SOCK代表套接字)
- DEVICE: 设备号
- SIZE/OFF: 文件大小或偏移量
- NODE: 节点号
- NAME: 网络地址(格式为
IP:端口号
)
- 输出包含多个字段,其中重要的是:
高级技巧
-
使用
pfctl
配置防火墙:- macOS自带了一个名为
pf
的包过滤防火墙,可以通过pfctl
命令进行配置。例如,加载自定义规则集:sudo pfctl -f /etc/pf.conf
- macOS自带了一个名为
-
系统偏好设置中的安全性与隐私:
- 在“系统偏好设置 > 安全性与隐私 > 防火墙”中,您可以开启或关闭防火墙,并配置允许的应用程序和服务。
-
日志文件分析:
- macOS的日志系统已经迁移到统一的日志系统(Unified Logging System),可以通过
log
命令查看日志。例如,查看特定应用程序的日志:log show --predicate 'process == "YourApp"' --info
- macOS的日志系统已经迁移到统一的日志系统(Unified Logging System),可以通过
Linux
使用终端
-
打开终端:
- 根据您的桌面环境,可以通过快捷键或菜单打开终端。
-
使用
ss
,netstat
或lsof
:- 对于
ss
,可以使用以下命令来查看监听的端口及相应的程序:sudo ss -tulnpe
- 对于
netstat
,可以使用类似下面的命令:sudo netstat -tulnpe
- 对于
lsof
,可以使用以下命令:sudo lsof -i -P -n | grep LISTEN
- 对于
-
查找特定端口:
- 可以结合
grep
使用这些命令来查找特定端口的信息,例如:sudo ss -tnlp | grep ':8080'
- 可以结合
-
使用
systemctl
查看服务状态:- 如果你知道占用端口的服务名称,可以使用
systemctl
查看服务状态,并且启用/禁用它。例如:sudo systemctl status <service-name>
- 如果你知道占用端口的服务名称,可以使用
高级技巧
-
防火墙配置:
- Linux有不同的防火墙解决方案,如
iptables
或firewalld
。例如,使用iptables
添加一条规则来阻止对特定端口的访问:sudo iptables -A INPUT -p tcp --dport 8080 -j DROP
- 使用
firewalld
添加永久规则:sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent sudo firewall-cmd --reload
- Linux有不同的防火墙解决方案,如
-
日志文件分析:
- 许多Linux发行版使用
rsyslog
或journalctl
来收集系统日志。例如,使用journalctl
查看特定服务的日志:sudo journalctl -u <service-name>
- 许多Linux发行版使用
-
cgroup 和 namespace:
- 对于容器化环境(如 Docker),可以使用 cgroups 和 namespaces 来隔离资源和网络。您可以使用
docker ps
和docker stats
命令来监控正在运行的容器及其资源使用情况。
- 对于容器化环境(如 Docker),可以使用 cgroups 和 namespaces 来隔离资源和网络。您可以使用
注意事项
-
权限问题:
- 大多数涉及网络接口和进程信息的命令都需要root权限。因此,在执行上述命令时,您可能需要在命令前加上
sudo
(对于Linux和macOS),或者以管理员身份运行命令提示符/PowerShell(对于Windows)。
- 大多数涉及网络接口和进程信息的命令都需要root权限。因此,在执行上述命令时,您可能需要在命令前加上
-
安全考虑:
- 在停止关键系统服务或修改防火墙规则之前,请确保了解所做的更改可能带来的影响,并备份现有配置。
-
解析非标准端口:
- 有些应用程序可能会使用非标准端口。在这种情况下,除了常见的
netstat
和lsof
命令外,还可以尝试使用tcpdump
或 Wireshark 这样的网络抓包工具来捕获流量,从而帮助识别未知端口上的通信。
- 有些应用程序可能会使用非标准端口。在这种情况下,除了常见的