在Linux或类Unix系统下如何确定端口是否正在使用?

电子说

1.3w人已加入

描述

在Linux或类Unix系统下如何确定端口是否正在使用?如何验证 Linux 服务器上正在侦听哪些端口?如何使用 CLI 检查 Linux 操作系统上的端口是否正在使用?

验证哪些端口正在服务器网络接口上侦听非常重要。您需要注意开放端口以检测入侵。除了入侵之外,出于故障排除的目的,可能有必要检查端口是否已被服务器上的其他应用程序使用。

例如,您可以在同一系统上安装 Apache 和 Nginx 服务器。因此有必要知道 Apache 或 Nginx 是否正在使用 TCP 端口#80/443。本快速教程提供了使用 netstat、nmap 和 lsof 命令检查正在使用的端口并查看正在使用该端口的应用程序的步骤。

如何检查端口是否被使用

查看Linux上的监听端口和应用程序:

1.打开终端应用程序,即 shell 提示符。
2.在 Linux 上运行以下任一命令来查看开放端口:

TCP通信

3.对于最新版本的 Linux,请使用 ss 命令。例如,ss -tulw

让我们详细看看命令及其输出。

选项#1:lsof 命令

语法为: 示例输出:

TCP通信

TCP通信

考虑上面输出的最后一行:

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 命令选项为:

TCP通信

  • -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命令,如下:

TCP通信

TCP通信

其中,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 的输出:

TCP通信

OpenBSD netstat 语法

TCP通信

选项#3:nmap 命令

语法是:

TCP通信

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分