我需要找到的未使用本地端口的范围应作进一步使用(对于appium节点)。我找到了以下代码:
getPorts() {
freePort=$(netstat -aln | awk '
$6 == "LISTEN" {
if ($4 ~ "[.:][0-9]+$") {
split($4, a, /[:.]/);
port = a[length(a)];
p[port] = 1
}
}
END {
for (i = 7777; i < 65000 && p[i]; i++){};
if (i == 65000) {exit 1};
print i
}
')
echo ${freePort}
}
如果我需要一个免费的端口,这很好用,但是对于并行测试执行,我们需要多个未使用的端口。因此,我需要修改该函数,以便从第一个找到的免费端口开始,然后将结果存储在一个String变量中,以获取一个(而不是一个)免费端口,而是多个(取决于参数)。例如,如果我需要三个3个设备的端口,则结果应为: 7777 7778 7779
该代码应可在macOS上运行,因为我们将Mac mini用作测试服务器。
由于我只是从bash开始,所以对我来说有点复杂
答案 0 :(得分:1)
这是一个bash
代码,在Linux上运行良好,因此,如果您的Mac也运行bash
,它将为您工作。
getPorts() {
amount=${1}
found=0
ports=""
for ((i=7777;i<=65000;i++))
do
(echo > /dev/tcp/127.0.0.1/${i}) >/dev/null 2>&1 || {
#echo "${i}"
ports="${ports} ${i}"
found=$((found+1))
if [[ ${found} -ge ${amount} ]]
then
echo "${ports:1}"
return 0
fi
}
done
return 1
}
这里是如何使用它和输出的信息:
$ getPorts 3
7777 7778 7779
$ getPorts 10
7777 7778 7779 7780 7781 7782 7783 7784 7785 7786
答案 1 :(得分:0)
从5000到5100查找未使用的端口:
range=(`seq 5000 5100`)
ports=`netstat -tuwan | awk '{print $4}' | grep ':' | cut -d ":" -f 2`
echo ${range[@]} ${ports[@]} ${ports[@]} | tr ' ' '\n' | sort | uniq -u