2017-06-09 28 views
1

所以我有一個腳本創建一個隧道。要做到這一點,它使用隨機端口。 這是隨機的端口代如何確保選擇殼體中的開放端口

RPORT=1 
while [ $RPORT -lt 2000 ] 
     do 
     RPORT=$[($RANDOM % 3000) + 1] 
done 

這是一個好只有當它選擇的端口是不使用的邏輯。如果該端口處於活動狀態,則在使用該端口時無法訪問該服務器。

我想要做這樣的事情

while [netsat -nat | grep $RPORT] = true 
     do 
     RPORT=$[($RANDOM % 3000) + 1] 

所以我首先要檢查,如果該端口正在使用中,如果是這樣,尋找另一個隨機端口,檢查它是否在使用中,如果沒有則用它。

非常感謝您提前幫助您!

+0

https://superuser.com/questions/885414/linux-command-get-unused-port –

+0

非常感謝鏈接!這個功能就是我所需要的。 'code'function random_unused_port {netstat --listening --all --tcp --numeric | sed'1,2d; s/[^ [: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)'code' –

回答

0
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的鏈接!

+0

注意:我沒有提到這個答案,我不認爲它的確如此,因爲'seq 1 65535'會生成所有端口,然後'sort - n | uniq -u'(或更短的'sort -nu')會與其他列表合併(??) –

0

要解決的答案,也因爲端口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 
+0

謝謝Nahuel!這就是我對端口範圍所做的事情,我確實將它從20000設置爲65536,因此它不會使用保留端口。插入grep命令的區別是什麼?'grep -F -x -v -f'。謝謝! –

+0

grep -v正在做第二組減去第一組,而在其他答案它是一個聯盟,並可以返回任何端口之間1和65536 –

+0

啊,謝謝!這個非常重要! –