
端口就像门一样,允许 Linux 系统上的应用程序和程序发送和接收数据。如果您想查看哪些端口正在使用、哪些端口处于开放状态。
什么是端口?
在深入了解命令之前,我们先花点时间了解一下什么是端口:
- 端口号是用于标识计算机上运行的特定程序或应用的编号。例如:
- Web 服务器端口通常使用端口 80(HTTP)或端口 443(HTTPS)。
- 通过 SSH 进行远程登录通常使用端口 22。
- 每个端口都有一个介于0 到 65535之间的数字,这些数字分为三个主要组:
- 0–1023:保留给 HTTP 和 FTP 等常用协议。
- 1024–49151:用于您安装的应用程序。
- 49152–65535:应用程序连接到服务时使用的临时端口。
解决了这个问题之后,我们来如何检查端口的运行状况。
如何在Linux中检查端口
Linux 提供了许多工具来帮助您检查开放或监听的端口。下面,我们将介绍五种常用方法,并解释每种方法的作用。
1. 使用 netstat
netstat 命令可以详细显示网络连接和端口使用情况。
打开终端并输入:
netstat -tuln
以下是每个选项的含义:
- -t:显示 TCP(传输控制协议)端口。
- -u:显示UDP(用户数据报协议)端口。
- -l:仅显示正在监听的端口。
- -n:跳过将程序名称(例如“ssh”)转换为端口号,这样速度会更快。
您将看到:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
udp 0 0 0.0.0.0:68 0.0.0.0:*
以下是阅读本文的方法:
- Proto:显示是 TCP 还是 UDP。
- 本地地址:您机器的 IP 地址和正在使用的端口。
- 国外地址:另一台机器的 IP 地址和端口(如果对所有人开放,则用 * 表示)。
- 状态:对于 TCP 而言,LISTEN 表示它正在等待连接。
简要说明: netstat 是 net-tools 软件包的一部分,而较新的 Linux 版本可能未预装该软件包。请使用以下命令安装:
sudo apt install net-tools # On Debian/Ubuntu
sudo yum install net-tools # On RHEL/CentOS
2. 使用 ss
ss是 netstat 的一个更新、更快的替代方案。它提供的信息类似,但在现代系统上运行得更好。
运行以下命令:
ss -tuln
这些选项与 netstat 相同,所以你应该能够立即上手。
您将看到:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:*
该输出与 netstat 类似,但ss 的速度往往更快,尤其是在处理大量连接时。
3. 使用 lsof
lsof(列出打开的文件)是一个方便的工具,可以查看哪些文件或网络连接正在被进程使用。
要查看哪些端口已打开以及哪些程序正在使用这些端口,请运行:
sudo lsof -i -P -n
- -i:网络相关文件的过滤器。
- -P:显示原始端口号而不是服务名称。
- -n:为了提高速度,跳过将 IP 地址转换为主机名的步骤。
您将看到:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1234 root 3u IPv4 12345 0t0 TCP *:22 (LISTEN)
dhclient 5678 root 6u IPv4 54321 0t0 UDP *:68
- 命令:使用该端口的程序。
- PID:进程 ID。
- 名称:端口和协议(例如,端口 22 上的 TCP)。
它的优势:
如果您正在进行故障排除,需要找出哪个进程正在使用特定端口,lsof就是您的首选工具。
4. 使用 nmap
nmap(网络映射器)非常适合扫描网络并检查哪些端口是开放的。
要扫描所有端口,请运行:
sudo nmap -sT -p- localhost
- -sT:执行 TCP 连接扫描。
- -p-:扫描所有 65,535 个端口。
您将看到:
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
- 端口:端口号和协议(TCP 或 UDP)。
- 状态:告诉你端口是打开的、关闭的还是被过滤的(被防火墙阻止的)。
- 服务:使用该端口的服务的通用名称。
nmap 的用途:
如果你想全面了解系统上所有开放的端口,或者需要扫描另一台机器,nmap是个不错的选择。
5. 使用 nc(Netcat)
Netcat是一个简单但功能强大的工具,用于检查特定端口是否打开。
要检查端口 22 是否开放,请键入:
nc -zv localhost 22
- -z:仅扫描开放端口,不发送数据。
- -v:显示详细输出。
您将看到:
Connection to localhost 22 port [tcp/ssh] succeeded!
它的优势:
如果你只需要快速检查某个特定端口是否打开,nc可以轻松完成这项工作。
解读结果
检查端口时,结果通常意味着以下几点:
- 监听/开放端口:这些端口已准备好接受连接。例如,Web 服务器会监听 80 端口或 443 端口。
- 关闭的端口:这些端口未使用,因此不会接受连接。
- 已过滤端口:这些端口被防火墙或安全规则阻止,因此它们看起来是不可见的。
常见场景
检查端口时,您可能会遇到以下情况:
- 如果您发现某个端口处于打开状态,而您并未预料到,这可能意味着某个您不需要或不认识的程序正在运行。最好进一步调查一下。
- 您需要的端口已关闭:程序可能未运行,或者防火墙可能阻止了它。
保护您的系统
检查端口只是第一步。以下是一些整理端口的方法:
停止不必要的程序:
如果某个程序正在你不需要的端口上运行,请将其关闭:
sudo systemctl stop <program_name>
sudo systemctl disable <program_name>
使用防火墙:
使用像 ufw(简易防火墙)这样的工具限制对端口的访问:
sudo ufw allow 22 # Allow SSH
sudo ufw deny 80 # Block HTTP
定期监控端口:
养成定期检查开放端口的习惯,尤其是在运行服务器时。
在 Linux 系统中检查端口并不复杂。无论你使用 netstat、ss、lsof、nmap 还是 nc,每个工具都能提供略有不同的信息。选择最适合你需求的工具,并大胆探索。熟能生巧!

