在Linux或类Unix系统下如何确定端口是否正在使用?如何验证 Linux 服务器上正在侦听哪些端口?如何使用 CLI 检查 Linux 操作系统上的端口是否正在使用?
验证哪些端口正在服务器网络接口上侦听非常重要。您需要注意开放端口以检测入侵。除了入侵之外,出于故障排除的目的,可能有必要检查端口是否已被服务器上的其他应用程序使用。
例如,您可以在同一系统上安装 Apache 和 Nginx 服务器。因此有必要知道 Apache 或 Nginx 是否正在使用 TCP 端口#80/443。本快速教程提供了使用 netstat、nmap 和 lsof 命令检查正在使用的端口并查看正在使用该端口的应用程序的步骤。
如何检查端口是否被使用
查看Linux上的监听端口和应用程序:
1.打开终端应用程序,即 shell 提示符。
2.在 Linux 上运行以下任一命令来查看开放端口:
3.对于最新版本的 Linux,请使用 ss 命令。例如,ss -tulw
让我们详细看看命令及其输出。
选项#1:lsof 命令
语法为: 示例输出:
考虑上面输出的最后一行:
sshd 85379 root 3u IPv4 0xffff80000039e000 0t0 TCP 10.86.128.138:22(监听)
- sshd是应用程序的名称。
- 10.86.128.138是 sshd 应用程序绑定到的 IP 地址(监听)
- 22是正在使用的 TCP 端口 (LISTEN)
- 85379是sshd进程的进程ID
查看 Internet 网络服务列表
/ etc/services是互联网服务的友好文本名称与其底层分配的端口号和协议类型之间的文本文件映射。使用cat命令或者more命令/ less命令查看:$less /etc/services
选项#2:netstat 或 ss 命令
您可以使用netstat检查监听端口和应用程序,如下所示。
Linux netstat 语法
运行 netstat 命令和grep 命令来过滤掉处于 LISTEN 状态的端口: 或过滤掉特定的 TCP 端口,例如 443: 其中 netstat 命令选项为:
- -t :选择所有TCP端口
- -u :选择所有UDP端口
- -l :显示监听服务器套接字(在列表状态下打开TCP和UDP端口)
- -p :显示套接字的 PID/程序名称。换句话说,该选项告诉谁打开了 TCP 或 UDP 端口。例如,在我的系统上,Nginx 打开了 TCP 端口 80/443,因此我将 /usr/sbin/nginx 或其 PID。
- -n :不解析名称(避免 dns 查找,这可以加快繁忙的 Linux/Unix 服务器上的 netstat 速度)
Linux 上的netstat 命令已弃用一段时间。因此,需要使用ss命令,如下:
其中,ss命令选项如下:
- -t :在 Linux 上仅显示 TCP 套接字
- -u :在Linux上仅显示UDP套接字
- -l :显示监听套接字。例如,SSHD 服务器打开 TCP 端口 22。
- -p :列出打开套接字的进程名称
- -n :不解析服务名称,即不使用 DNS
FreeBSD/macOS (OS X) netstat 语法
语法如下: 您也可以在 macOS 或 FreeBSD 上使用 sockstat 命令来显示打开的 TCP 或 UDP 端口。例如:我的FreeBSD 服务器版本13.xx 的输出:
OpenBSD netstat 语法
选项#3:nmap 命令
语法是:
-
Linux系统
+关注
关注
4文章
593浏览量
27396 -
PID控制
+关注
关注
10文章
460浏览量
40092 -
Shell
+关注
关注
1文章
365浏览量
23362 -
TCP通信
+关注
关注
0文章
146浏览量
4222
发布评论请先 登录
相关推荐
评论