本文目录导读:

Shell脚本 (Linux/Mac)
#!/bin/bash
# 生成1024-65535之间的随机端口(避开系统保留端口)
random_port=$(shuf -i 1024-65535 -n 1)
echo $random_port
# 或者使用更可靠的方法,检查端口是否被占用
generate_port() {
while true; do
port=$((RANDOM % (65535-1024) + 1024))
# 检查端口是否被占用
if ! ss -tlnp 2>/dev/null | grep -q ":$port "; then
echo $port
return
fi
done
}
# 使用示例
port=$(generate_port)
echo "Generated port: $port"
Python脚本
import random
import socket
def get_random_port(min_port=1024, max_port=65535):
"""生成一个随机的可用端口"""
while True:
port = random.randint(min_port, max_port)
# 检查端口是否可用
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
try:
s.bind(('localhost', port))
return port
except OSError:
continue # 端口被占用,重试
# 生成端口
random_port = get_random_port()
print(f"Random port: {random_port}")
# 单次生成(不检查可用性)
def quick_port():
return random.randint(1024, 65535)
print(f"Quick port: {quick_port()}")
Node.js脚本
const net = require('net');
// 方法1:直接生成随机端口(不检查)
function generateRandomPort() {
return Math.floor(Math.random() * (65535 - 1024) + 1024);
}
console.log('Random port:', generateRandomPort());
// 方法2:检查端口可用性
function getAvailablePort() {
return new Promise((resolve, reject) => {
const server = net.createServer();
server.listen(0, () => { // 0表示系统自动分配可用端口
const port = server.address().port;
server.close(() => resolve(port));
});
server.on('error', reject);
});
}
// 使用
(async () => {
const port = await getAvailablePort();
console.log('Available port:', port);
})();
Windows批处理脚本
@echo off
:: 生成1024-65535之间的随机端口
set /a port=%RANDOM% * (65535 - 1024) / 32768 + 1024
echo Random port: %port%
:: 如果需要检查端口可用性(需要PowerShell)
powershell -Command "& {
$port = Get-Random -Minimum 1024 -Maximum 65535;
$connection = Test-NetConnection -ComputerName localhost -Port $port -WarningAction SilentlyContinue;
while ($connection.TcpTestSucceeded) {
$port = Get-Random -Minimum 1024 -Maximum 65535;
$connection = Test-NetConnection -ComputerName localhost -Port $port -WarningAction SilentlyContinue;
}
Write-Output $port
}"
Go语言脚本
package main
import (
"fmt"
"math/rand"
"net"
"time"
)
func main() {
// 方法1:简单随机
rand.Seed(time.Now().UnixNano())
simplePort := rand.Intn(65535-1024) + 1024
fmt.Printf("Simple random port: %d\n", simplePort)
// 方法2:获取可用端口
port := getAvailablePort()
fmt.Printf("Available port: %d\n", port)
}
func getAvailablePort() int {
for {
port := rand.Intn(65535-1024) + 1024
addr := fmt.Sprintf("localhost:%d", port)
listener, err := net.Listen("tcp", addr)
if err == nil {
listener.Close()
return port
}
}
}
使用建议
- 开发环境:推荐使用1024-65535范围
- 生产环境:建议使用系统自动分配(端口0)
- Docker/容器:考虑使用环境变量配置
- 安全考虑:避免使用知名端口(<1024)
选择哪种方法取决于你的使用场景和技术栈。