使用netstat命令查看系统开启的TCP端口的核心方法是执行netstat -an | findstr LISTENING(Windows)或netstat -tlnp(Linux),这能直接列出所有处于监听状态的TCP连接及其对应的端口号。
在服务器运维和网络安全排查中,端口状态是判断服务是否正常运行的第一道防线,很多新手在面对满屏的代码时感到无从下手,其实只要掌握几个关键参数,就能像老练的网管一样快速定位问题,本文将通过具体场景,拆解不同操作系统下的实操步骤,帮助你彻底搞懂端口监控。
为什么需要关注TCP监听端口
TCP端口是网络通信的入口,就像房子的门窗,如果门窗大开且无人看管,黑客就能轻易潜入,业内专家指出,绝大多数数据泄露事件都源于未正确配置的开放端口,定期审查端口状态不仅是技术需求,更是安全合规的基本要求。
Windows系统下的端口查看实操
Windows环境是最常见的办公场景,这里的操作相对直观,但需要区分命令提示符(CMD)和PowerShell的不同用法。
基础命令:快速筛选监听状态
在Windows中,最经典的命令组合是netstat -ano,这个命令会输出所有网络连接、端口监听情况以及进程ID(PID),为了只看TCP端口,我们需要结合过滤工具。
使用Findstr进行精准过滤
在CMD窗口中输入以下命令:
netstat -ano | findstr LISTENING
这条命令的执行逻辑非常清晰:
netstat -ano:列出所有协议、所有连接,并显示关联的进程ID。- 管道符,将前一个命令的输出作为后一个命令的输入。
findstr LISTENING:只保留包含“LISTENING”关键字的行,即正在等待连接的端口。
输出结果通常包含五列信息:协议、本地地址、外部地址、状态和PID,本地地址中的冒号后面就是端口号。

0.0.0:80表示本机所有IP的80端口正在监听。
关联进程:找出谁占用了端口
看到PID后,你可能想知道是哪个软件在运行,此时可以使用tasklist命令进行交叉查询,假设上一步得到的PID是1234,你可以输入:
tasklist | findstr 1234
系统会返回进程名称,如nginx.exe或java.exe,这样你就知道是Web服务器还是数据库服务占用了端口。
Linux系统下的端口查看技巧
Linux服务器占据了企业级应用的大部分市场,其命令风格更加简洁高效,但权限要求更高。
核心命令解析:netstat -tlnp
在Linux终端中,推荐使用netstat -tlnp命令,这个参数组合是查看TCP端口的黄金标准。
-t:仅显示TCP协议。-l:仅显示监听状态的端口。-n:以数字形式显示IP和端口,避免DNS解析带来的延迟和混淆。-p:显示占用端口的进程名称和PID。
执行后,你会看到类似如下的输出:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0: LISTEN 1024/sshd tcp 0 0 127.0.0.1:3306 0.0.0.0: LISTEN 2048/mysqld
权限问题:为什么看不到进程名?
如果在执行命令时,PID/Program name列显示为“-”,说明当前用户没有权限查看其他用户的进程信息,这是Linux的安全机制,解决方法是使用sudo提升权限:
sudo netstat -tlnp

输入密码后,你将看到完整的进程信息,如sshd或mysqld。
替代方案:ss命令的优势
近年来,越来越多的Linux发行版开始推荐使用ss命令替代netstat,因为ss速度更快,能显示更多内核级信息,对于想知道如何查看Linux开启的TCP端口ss -tlnp是更现代的选择。
其参数含义与netstat类似:
-t:TCP协议。-l:监听状态。-n:数字格式。-p:显示进程。
执行sudo ss -tlnp,输出结果与netstat高度相似,但在处理成千上万个连接时,响应速度有明显优势。
端口状态解读与安全建议
仅仅看到端口开放是不够的,理解端口状态背后的含义至关重要。
常见TCP端口状态及其含义
在netstat的输出中,状态列是关键信息,以下是几种常见状态的场景分析:
LISTEN:正常监听
这是最理想的状态,表示服务正在等待连接,Web服务器的80或443端口通常处于此状态,如果预期中的服务端口未显示LISTEN,说明服务可能未启动或配置错误。
ESTABLISHED:连接已建立
表示通信双方已经成功握手并正在传输数据,如果某个端口突然出现大量ESTABLISHED连接,且来源IP异常,可能是遭受了DDoS攻击或端口扫描。
CLOSE_WAIT:等待关闭
这是一个危险信号,它表示远程端已经关闭连接,但本地应用程序尚未调用close()函数,如果大量端口处于CLOSE_WAIT状态,通常意味着代码存在资源泄漏,需要开发人员介入优化。
如何关闭不必要的端口
发现高危端口后,下一步是进行加固。
停止相关服务
如果是Windows,可以在“服务”管理器中找到对应服务并停止,停止IIS服务可以关闭80端口,在Linux中,使用

systemctl stop service_name命令。
配置防火墙
更推荐的方式是通过防火墙规则限制访问,而不是直接停止服务。
Windows防火墙配置
使用netsh命令可以添加防火墙规则,禁止外部访问8080端口:
netsh advfirewall firewall add rule name="Block 8080" dir=in action=block protocol=TCP localport=8080
Linux防火墙配置
对于使用iptables的系统,命令如下:
sudo iptables -A INPUT -p tcp --dport 8080 -j DROP
对于使用firewalld的系统(如CentOS 7+),命令为:
sudo firewall-cmd --permanent --add-port=8080/tcp --remove-port=8080/tcp sudo firewall-cmd --reload
常见问题解答
netstat命令查看系统开启的TCP端口常见问题
为什么netstat显示端口为0.0.0.0而不是127.0.0.1?
0.0.0表示监听所有网络接口,包括本地回环和外部网卡,这意味着该端口不仅本机可以访问,外部网络也可以尝试连接,如果服务只需要本机访问,应配置为127.0.0.1,以提高安全性。
如何查看UDP端口?
netstat默认可能只显示TCP,要查看UDP端口,可以在命令中加入-u参数,即netstat -an | findstr UDP(Windows)或netstat -ulnp(Linux),UDP是无连接协议,没有ESTABLISHED状态,只有SENDQ和RECVQ队列状态。
netstat命令在Windows 11中还能用吗?
可以,虽然微软推荐使用Get-NetTCPConnection等PowerShell cmdlet,但netstat作为传统命令依然保留在Windows 11中,完全兼容且功能一致,对于习惯命令行操作的管理员来说,它依然是最快捷的工具。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/411374.html
