获取 Linux 中开放端口的列表

获取 Linux 中开放端口的列表

我需要一个 Linux 命令来列出应用程序中使用的所有可用开放端口

lsof -i TCP| fgrep LISTEN

看起来没什么帮助,因为其中列出的端口不一定是免费使用的。如何列出未使用的免费开放端口?

答案1

netstat -lntu

@askmish 的回复将为您提供系统上在 tcp 和 udp 端口​​上运行的服务列表,其中

  • -l= 仅限正在监听某个端口的服务
  • -n= 显示端口号,不尝试解析服务名称
  • -t= TCP 端口
  • -u= udp 端口
  • -p= 程序名称

您不需要“p”参数,因为您只关心哪些端口是空闲的,而不是哪个程序正在其上运行。

不过,这只能显示系统上哪些端口已用完。这不会告诉您网络的状态,例如,如果您位于 NAT 后面,并且希望某些服务可以从外部访问。或者,如果防火墙阻止外部访问者访​​问端口。在这种情况下,nmap 可以提供帮助。警告:仅在您控制的网络上使用 nmap。此外,有些防火墙规则可以阻止 nmap ping,您必须摆弄选项才能获得正确的结果。

答案2

自从net-tools已弃用,您可以使用ss命令而不是netstat如果netstat你的机器上不存在:

ss -lntu

应该类似于

netstat -lntu

根据内置帮助:

-n, --numeric       don't resolve service names
-l, --listening     display listening sockets
-t, --tcp           display only TCP sockets
-u, --udp           display only UDP sockets
-p, --processes     show process using socket

如果您希望查看使用每个端口的进程,并且它们属于不同的用户,您需要运行

sudo ss -lntup

答案3

此命令将列出开放的网络端口及其拥有的进程:

netstat -lnptu

然后您可以根据您的具体规格过滤结果。

您还可以使用nmap它来获取有关端口的更详细结果。

答案4

我对原始问题的看法是,他问的是未使用的端口,而不是当前连接到服务的端口。如果是这样的话,除了列出已使用的端口并假设其他端口未使用之外,没有其他特定方法可以列出它们。

还有一点要记住:作为用户,您无法打开小于 1024 的端口(您需要 root 权限才能打开)。

相关内容