如何在服务器上找到完全空闲的 TCP 端口?我已经尝试过命令行;
netstat -an
但我被告知那些状态为“聆听”的已经被使用了。
我还尝试了一个名为 TCPView 的工具,但它同样只显示正在使用的 TCP 端口。我知道如何远程登录到端口以检查其打开情况,但我需要找到一个免费的端口。
netstat -lntu
这将解决你的目的。
灵感来自https://gist.github.com/lusentis/8453523
从种子端口开始,并增加它直到可用
BASE_PORT=16998
INCREMENT=1
port=$BASE_PORT
isfree=$(netstat -taln | grep $port)
while [[ -n "$isfree" ]]; do
port=$[port+INCREMENT]
isfree=$(netstat -taln | grep $port)
done
echo "Usable Port: $port"
在 Bash 中,您可以编写简单的
for
循环来检查哪些 TCP 端口是空闲的,例如
$ for i in {1..1024}; do (exec 2>&-; echo > /dev/tcp/localhost/$i && echo $i is open); done
22 is open
25 is open
111 is open
587 is open
631 is open
841 is open
847 is open
1017 is open
1021 is open
有关更多信息,请查看:高级 Bash 脚本指南:第 29 章。
/dev
和 /proc
基于@Fengzmg的答案:
本次实施:
ss
而不是 netstat
grep
-ing 输出,而是使用 ss
sport
),而不是匹配目标端口的 grep
方法grep
方法将匹配 443
中的 30443
。注意:
-4
仅限于仅 IPv4。还有 -6
但您不能指定其中一个来匹配两者。
BASE_PORT=1234
INCREMENT=1
port=$BASE_PORT
while [ -n "$(ss -tan4H "sport = $port")" ]; do
port=$((port+INCREMENT))
done
echo "Usable Port: $port"