获取 Linux 中的开放端口列表

Err*_*ion 236 linux ports

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

lsof -i TCP| fgrep LISTEN
Run Code Online (Sandbox Code Playgroud)

不认为有帮助,因为它列出的端口不一定免费使用。如何列出未使用的免费开放端口?

小智 307

netstat -lntu
Run Code Online (Sandbox Code Playgroud)

正如@askmish 所回复的,会给你在你的系统上运行的 tcp 和 udp 端口​​的服务列表,其中

  • -l = 仅在某个端口上侦听的服务
  • -n = 显示端口号,不要尝试解析服务名称
  • -t = tcp 端口
  • -u = UDP 端口
  • -p = 程序名称

您不需要 'p' 参数,因为您只对获取哪些端口空闲而不是在其上运行的程序感兴趣。

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

  • 请注意,`netstat` 在许多系统上已被弃用,而应改用 `ss`。 (25认同)
  • “netstat”的一大优点是它几乎在任何地方都适用。在 Windows 上,参数有点不同,但它就在那里,我的 Amiga 和 AmiTCP 也有它,所以 Linux 是个奇怪的地方。幸运的是,“net-tools”仍然存在。 (4认同)
  • 但如果你在 busybox 上,则不包括 `ss` (2认同)

小智 113

由于net-tools已弃用,您可以使用该ss命令代替netstatif netstatis not present 在您的机器上:

ss -lntu
Run Code Online (Sandbox Code Playgroud)

应该类似于

netstat -lntu
Run Code Online (Sandbox Code Playgroud)

根据内置帮助:

-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
Run Code Online (Sandbox Code Playgroud)

  • 另一个有用的标志是 -p,它显示套接字的进程 ID。 (5认同)

小智 25

此命令将列出打开的网络端口和拥有它们的进程:

netstat -lnptu

此后,您可以将结果过滤到您的确切规格。

您还可以使用nmap有关端口的更细粒度的结果。

  • -p 标志需要某些进程的 root 权限,所以它是 `sudo netstat -lnptu` (3认同)

diy*_*ism 6

所有打开的端口,包括响应流量:

netstat -tuwanp 2>/dev/null | awk '{print $4}' | sort | uniq -c | wc -l
Run Code Online (Sandbox Code Playgroud)

  • *只是*唯一端口号和IPv4的列表:```netstat -tuwanp4 | awk '{print $4}' | grep ':' | cut -d ":" -f 2 | 排序 | uniq``` (4认同)