寻找下一个开放端口

Dav*_*ave 5 unix bash shell cygwin

有没有办法,使用基本的Unix命令,找到下一个未使用的端口号,从端口4444开始向上?我是(通过openssh)进入Windows XP机器,运行Cygwin工具并使用bash shell.

谢谢, - 戴夫

use*_*681 10

试试这个:

for port in $(seq 4444 65000); do echo -ne "\035" | telnet 127.0.0.1 $port > /dev/null 2>&1; [ $? -eq 1 ] && echo "unused $port" && break; done
Run Code Online (Sandbox Code Playgroud)

哪里

seq 4444 65000 - port range for check
echo -ne "\035" - escape character to force close telnet session (^])
Run Code Online (Sandbox Code Playgroud)

如果telnet完成,退出代码1表示连接被拒绝:

$ telnet 127.0.0.1 4444
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
telnet: Unable to connect to remote host
$ echo $?
1
Run Code Online (Sandbox Code Playgroud)

否则我们决定连接成功,退出代码为0.

编辑: 特殊的cygwin:你需要安装inetutils包含telnet端口的附加包,并使用如下脚本:

for port in $(seq 4444 65000); do echo -ne "\035" | /usr/bin/telnet 127.0.0.1 $port > /dev/null 2>&1; [ $? -eq 1 ] && echo "unused $port" && break; done
Run Code Online (Sandbox Code Playgroud)