获取 Linux 中的开放端口列表
我需要一个 Linux 命令来列出所有可在应用程序中使用的免费开放的端口
lsof -i TCP| fgrep LISTEN
看上去没有帮助,因为它列出的端口不一定是免费的。如何列出未使用的免费开放端口?
我需要一个 Linux 命令来列出所有可在应用程序中使用的免费开放的端口
lsof -i TCP| fgrep LISTEN
看上去没有帮助,因为它列出的端口不一定是免费的。如何列出未使用的免费开放端口?
由 @askmish 回答的
netstat -lntu
会给你一个在你的系统上运行的服务列表,其中
-l
= 只有在某些端口上监听的服务 -n
= 显示端口号。不要试图解析服务名称 -t
= tcp 端口 -u
= udp 端口 -p
= 程式名称 你不需要'p'参数, 因为你只想知道哪些端口是空闲的, 而不是哪个程序在上面运行。
这只显示系统上的哪些端口被用完了。这并不能告诉您网络的状态,例如,如果您的网络是在NAT的后面,而您希望某些服务可以从外部访问。或者是防火墙阻挡了外部访问者的端口。在这种情况下,nmap就能救你于水火。警告:只在你控制的网络上使用nmap。另外,有一些防火墙规则可以阻止nmap的ping,你必须要在选项中修改一下才能得到正确的结果。
由于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
试试
sudo netstat -plnt | grep -E '(0.0.0.0:|:::|127.0.0.1:|::1:)' | awk 'NR>2{print $7}' | sort -n | uniq
,看看这个。
下面的命令可以在任何一个与Ubuntu/Debian相同的Unix上工作,输出的格式与Ubuntu/Debian相同–本地地址在第4列,输出的内容包括顶部的两行标题。
如果你只想要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