未使用のローカルポートを見つける最も簡単な方法は何ですか?
現在私は次のようなものを使用しています:
port=$RANDOM
quit=0
while [ "$quit" -ne 1 ]; do
netstat -a | grep $port >> /dev/null
if [ $? -gt 0 ]; then
quit=1
else
port=`expr $port + 1`
fi
done
とても迂回しているような気がするので、私が見逃した組み込みパスのようなより簡単なパスがあるかどうか疑問に思います。
ベストアンサー1
私の解決策は、カーネルがip_local_port_rangeからポートを割り当てる必要があるポート0にバインドすることでした。次にソケットを閉じて、設定で適切なポート番号を使用します。
これは、必ずしも必要でない限り、カーネルがポート番号を再利用しないようです。ポート 0 の後続バインディングには別のポート番号が割り当てられます。 Pythonコード:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 0))
addr = s.getsockname()
print(addr[1])
s.close()
これは単にポート番号を提供します。60123
。
このプログラムを10,000回実行すると(このプログラムを同時に実行する必要があります)、10,000の異なるポート番号が得られます。だから私はこのポートを使うのがかなり安全だと思います。