Linux如何检测服务是否正在监听端口?lsof与nc命令实践

要确认服务是否监听特定端口,常用方法是使用lsof和nc命令。1. 使用lsof -i :可查看具体端口的监听情况,若有输出说明服务正在监听;2. 使用nc -zv 测试端口连通性,提示succeeded表示端口可达;3. 可结合ss -tuln或netstat -tuln查看整体监听状态。注意服务可能因防火墙或绑定地址限制导致外部无法访问,需交叉验证多个命令结果以排查问题。

Linux如何检测服务是否正在监听端口?lsof与nc命令实践

要确认某个服务是否正在监听特定端口,最常用的方法是使用 lsof 和 nc 这两个命令。它们在排查网络问题、调试服务时非常实用,尤其适合运维人员和开发人员。

Linux如何检测服务是否正在监听端口?lsof与nc命令实践

下面介绍几种常见的使用方式,帮助你快速判断端口是否被正确监听。

Linux如何检测服务是否正在监听端口?lsof与nc命令实践


1. 使用 lsof 查看监听中的端口

lsof(list open files)是一个强大的工具,可以列出当前系统中打开的文件和网络连接。在网络排查中,它常用于查看哪些进程正在监听哪些端口。

基本命令:

Linux如何检测服务是否正在监听端口?lsof与nc命令实践

sudo lsof -i :<端口号>

比如你想查看是否有服务在监听 80 端口:

sudo lsof -i :80

输出示例:

COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME nginx    1234   root    6u  IPv4  12345      0t0  TCP *:http (LISTEN)

这说明 nginx 正在监听 80 端口。

常见选项说明:

  • -i ::指定端口过滤
  • -P:显示端口号而不是服务名
  • -n:不进行 DNS 解析,加快速度

如果你没有看到任何输出,那可能这个端口没有被监听。


2. 使用 nc 检测端口是否可连接

nc(netcat)是一个多功能网络工具,可以用来测试端口是否开放或可连接。

基本命令:

nc -zv <IP地址> <端口号>

例如检测本地 3306 端口是否可用:

nc -zv localhost 3306

输出示例:

Connection to localhost 3306 port [tcp/mysql] succeeded!

如果提示 succeeded,说明端口是通的;如果没有响应或报错,可能是服务没启动或者防火墙拦截了。

注意事项:

  • nc 测试的是“能否建立连接”,并不保证服务本身正常运行
  • 如果你用的是 ncat 或 nc6,命令语法类似
  • 有些 linux 发行版默认没有安装 nc,可以通过包管理器安装,如 yum install nmap-ncat 或 apt install netcat

3. 结合 ss 或 netstat 辅助排查

虽然不是标题里的命令,但有时候你会想换一种方式验证结果。可以用 ss 或 netstat 来查看监听状态。

例如:

ss -tuln | grep :22

或者:

netstat -tuln | grep :22

这些命令会列出所有处于 LISTEN 状态的 TCP/udp 端口,适合快速浏览整个服务器的监听情况。


小结一下

  • 用 lsof 可以看到哪个进程占用了哪个端口
  • 用 nc 可以测试外部是否能连上该端口
  • 遇到问题时,多尝试几个命令交叉验证更可靠

基本上就这些方法了,不复杂但容易忽略细节的地方在于:有时服务虽然在监听,但因为防火墙设置或 bind 地址限制(比如只绑定了 127.0.0.1),导致外部无法访问。遇到这种情况,记得检查配置和防火墙规则。

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享