我需要一个 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 权限才能打开)。