如何用脚本生成随机端口号

wen 实用脚本 2

本文目录导读:

如何用脚本生成随机端口号

  1. Shell脚本 (Linux/Mac)
  2. Python脚本
  3. Node.js脚本
  4. Windows批处理脚本
  5. Go语言脚本
  6. 使用建议

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
        }
    }
}

使用建议

  1. 开发环境:推荐使用1024-65535范围
  2. 生产环境:建议使用系统自动分配(端口0)
  3. Docker/容器:考虑使用环境变量配置
  4. 安全考虑:避免使用知名端口(<1024)

选择哪种方法取决于你的使用场景和技术栈。

抱歉,评论功能暂时关闭!