获取Linux中的开放端口列表


191

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

lsof -i TCP| fgrep LISTEN

由于列出的端口不一定免费供使用,因此没有帮助。如何列出未使用的空闲开放端口?

Answers:


258
netstat -lntu

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

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

您不需要'p'参数,因为您只想获取空闲的端口,而不是正在运行的程序。

但是,这仅显示系统上的哪些端口已用完。这不会告诉您网络的状态,例如,如果您位于NAT之后,并且希望某些服务可以从外部访问。或者,如果防火墙阻止了外部访问者的端口。在这种情况下,nmap可以提供帮助。警告:仅在您控制的网络上使用nmap。另外,还有一些防火墙规则可能会阻止nmap ping,您必须四处寻找选项以获取正确的结果。


19
请注意,netstat在许多系统上已不ss建议使用它,而应改用它。
Johu

1
但是ss不包括如果您在busybox 上
jcollum

90

由于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

3
另一个有用的标志是-p,它显示套接字的进程ID。
Talespin_Kit

21

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

netstat -lnptu

之后,您可以根据您的具体要求过滤结果。

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


2
-p标志需要某些进程的root特权,所以它将是sudo netstat -lnptu
klaus se 2014年

5

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

netstat -tuwanp 2>/dev/null | awk '{print $4}' | sort | uniq -c | wc -l

3
名单:唯一的端口号和仅支持IPv4netstat -tuwanp4 | awk '{print $4}' | grep ':' | cut -d ":" -f 2 | sort | uniq
阿伦C.德布勒因

+1用于显示如何从结果中过滤和提取数字。编辑以从netstat中删除stderr输出(在Ubuntu中将标头添加到结果中)。
datashaman '16

嗯,再三考虑。-1为未回答问题。
datashaman '16

1

我对原始问题的看法是,他正在询问未使用的端口,而不是当前连接到服务的端口。在这种情况下,除了列出已使用的端口并假定其他未使用端口之外,没有其他方法可以列出它们。

需要牢记的另一点:作为用户,您将无法打开小于1024的端口(您将需要root权限)。


0

以下命令将在任何以与Ubuntu / Debian格式相同的格式输出的Unix上运行-本地地址在第4列中,并且输出在顶部包括2行标题。如果这些数字之一不同,请调整以下awk命令。

如果仅需要IPv4:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '0.0.0.0:' | sed 's/.*://' | sort -n | uniq

如果仅需要IPv6:

netstat -lnt | awk 'NR>2{print $4}' | grep -E ':::' | sed 's/.*://' | sort -n | uniq

如果您两者都想要:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '(0.0.0.0:|:::)' | sed 's/.*://' | sort -n | uniq

该命令输出在所有接口上监听的端口号列表。如果要列出在localhost接口上侦听的所有端口,请使用以下命令:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '(127.0.0.1:|::1:)' | sed 's/.*://' | sort -n | uniq

0

尝试

sudo netstat -plnt | grep -E '(0.0.0.0:|:::|127.0.0.1:|::1:)' |  awk 'NR>2{print $7}' | sort -n  | uniq

看看这个。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.