Bash 如何保证壳体中开口的选择
所以我有一个脚本创建了一个隧道。为此,它使用随机端口。 这是随机端口生成的逻辑Bash 如何保证壳体中开口的选择,bash,shell,port,Bash,Shell,Port,所以我有一个脚本创建了一个隧道。为此,它使用随机端口。 这是随机端口生成的逻辑 RPORT=1 while [ $RPORT -lt 2000 ] do RPORT=$[($RANDOM % 3000) + 1] done 只有当它选择的端口未被使用时,这才是好的。如果该端口处于活动状态,则在使用该端口时,我无法访问该服务器 我想做这样的事情 while [netsat -nat | grep $RPORT] = true do RP
RPORT=1
while [ $RPORT -lt 2000 ]
do
RPORT=$[($RANDOM % 3000) + 1]
done
只有当它选择的端口未被使用时,这才是好的。如果该端口处于活动状态,则在使用该端口时,我无法访问该服务器
我想做这样的事情
while [netsat -nat | grep $RPORT] = true
do
RPORT=$[($RANDOM % 3000) + 1]
所以我想首先检查这个端口是否正在使用,如果是,搜索另一个随机端口,检查它是否正在使用,如果没有,然后使用它
提前非常感谢您的时间和帮助
function random_unused_port {
(netstat --listening --all --tcp --numeric |
sed '1,2d; s/[^[:space:]]*[[:space:]]*[^[:space:]]*[[:space:]]*[^[:space:]]*[[:space:]]*[^[:space:]]*:\([0-9]*\)[[:space:]]*.*/\1/g' |
sort -n | uniq; seq 1 1000; seq 1 65535
) | sort -n | uniq -u | shuf -n 1
}
RANDOM_PORT=$(random_unused_port)
这就是帮助我的功能!
谢谢Nahuel Fouilleul的链接
这就是帮助我的功能!
谢谢Nahuel Fouilleul的链接 要解决这个问题,还因为从1到1000的端口是保留的,所以seq从1001开始
grep -F -x -v -f <(
netstat --listening --all --tcp --numeric |
sed '1,2d; s/[^[:space:]]*[[:space:]]*[^[:space:]]*[[:space:]]*[^[:space:]]*[[:space:]]*[^[:space:]]*:\([0-9]*\)[[:space:]]*.*/\1/g' |
sort -nu
) <(seq 1001 65536) | shuf -n 1
grep-F-x-v-F来修复答案,这也是因为从1到1000的端口是保留的,seq从1001开始
grep -F -x -v -f <(
netstat --listening --all --tcp --numeric |
sed '1,2d; s/[^[:space:]]*[[:space:]]*[^[:space:]]*[[:space:]]*[^[:space:]]*[[:space:]]*[^[:space:]]*:\([0-9]*\)[[:space:]]*.*/\1/g' |
sort -nu
) <(seq 1001 65536) | shuf -n 1
grep-F-x-v-F非常感谢您的链接!这个功能正是我所需要的code
function random_unused_port{(netstat--listing--all--tcp--numeric | sed'1,2d;s/[^ space:]*[^[:space:]*[:space:]*[^[:space:]*[:space:]*:([0-9]*[:space:]*./\1/g';sort-n |排序-n | uniq;seq;seq 1 1000;seq 1 65535)][排序-n | uniq}未使用的端口|code
非常感谢您的链接!这个功能正是我所需要的code
function random_unused_port{(netstat--listing--all--tcp--numeric | sed'1,2d;s/[^ space:]*[^[:space:]*[:space:]*[^[:space:]*[:space:]*:([0-9]*[:space:]*./\1/g';sort-n |排序-n | uniq;seq;seq 1 1000;seq 1 65535)][排序-n | uniq}未使用的端口|code
注意:我没有提到这个答案,我也不认为这是意料之中的,因为seq 1 65535
将生成所有端口,然后sort-n | uniq-u
(或更短的sort-nu
)将与其他列表合并(?)注意:我没有提到这个答案,我也不认为它是预期的,因为seq 1 65535
将生成所有端口,然后sort-n | uniq-u
(或更短的sort-nu
)将与其他列表合并(??)谢谢你,Nahuel!这就是我对端口范围所做的,我确实将它从20000设置为65536,所以它不会使用保留的端口。插入grep命令有什么区别?grep-F-x-v-F
。谢谢grep-v做的是第二个集合减去第一个集合,而在另一个答案中,它是一个并集,可以返回1到65536之间的任何端口。谢谢,Nahuel!这就是我对端口范围所做的,我确实将它从20000设置为65536,所以它不会使用保留的端口。插入grep命令有什么区别?grep-F-x-v-F
。谢谢grep-v是第二个集合减去第一个集合,而在另一个答案中,它是一个并集,可以返回1到65536之间的任何端口