如何用脚本限制上传速度

wen 实用脚本 2

本文目录导读:

如何用脚本限制上传速度

  1. 解决方案
  2. 如何选择
  3. 关键提示

解决方案

根据您的操作系统和具体应用环境,有几种主流方法可以实现上传限速:

Linux 环境(使用 tc 命令)

这是最灵活、最强大的方法,适用于控制整个网络接口或特定应用程序的流量。

#!/bin/bash
# 文件名: limit_upload.sh
# 用途:限制指定网络接口的上传速度为 1Mbps
# 网络接口名称,请根据实际情况修改(使用 `ip a` 命令查看)
INTERFACE="eth0"
# 限制上传速度为 1Mbit/s
UPLOAD_LIMIT="1mbit"
# 清除该接口上的现有规则
tc qdisc del dev $INTERFACE root 2>/dev/null
# 添加根队列规则,使用令牌桶过滤器(tbf)
tc qdisc add dev $INTERFACE root handle 1: tbf rate $UPLOAD_LIMIT burst 32kbit latency 400ms
echo "已限制 $INTERFACE 的上传速度为 $UPLOAD_LIMIT"
# 如需取消限制,运行:tc qdisc del dev $INTERFACE root

使用场景:服务器或开发机,需要限制特定网卡的上传流量。

Linux 环境(使用 wondershaper 工具)

如果您希望更简便地控制,可以使用现成的工具。

# 安装工具(Debian/Ubuntu)
sudo apt update && sudo apt install wondershaper
# 限制 eth0 接口:下载 10Mbps,上传 5Mbps
sudo wondershaper eth0 10240 5120
# 清除限制
sudo wondershaper clear eth0

使用场景:快速临时限制,或不想手动编写复杂 tc 规则时。

应用程序级限速(以 Python rclone 为例)

如果只是限制特定上传任务(如备份、同步),使用应用本身的限速参数更精准。

#!/usr/bin/env python3
# 文件名: backup_with_limit.py
# 用途:使用 rclone 限制上传速度
import subprocess
# 上传命令, --bwlimit 20M 表示限制上传/下载为 20MB/s
cmd = [
    "rclone", "copy",
    "/path/to/local/dir",
    "remote:backup-dir",
    "--bwlimit", "20M",
    "--progress"
]
subprocess.run(cmd, check=True)
print("备份完成,上传速度已限制为 20MB/s")

使用场景:只控制某个应用(如备份脚本)的网络占用,不影响系统其他部分。

Windows 环境(使用 PowerShell + Set-NetTCSetting

Windows 10/11 和 Windows Server 内置了网络节流功能。

# 文件名: limit_upload.ps1
# 用途:限制 Windows 系统上传速度
# 启用网络 QoS 策略
$rule = New-NetQosPolicy -Name "UploadLimit" -DSCPAction 46 -AppPathNameMatchCondition "*"
# 创建带宽限制规则(需要 Windows 专业版或企业版)
Set-NetTCSetting -NetworkThrottlingIndex 10 -BandwidthLimit 50
Write-Host "已设置网络节流,最大上传带宽为 50%"
# 删除规则(如需取消)
# Remove-NetQosPolicy -Name "UploadLimit"

使用场景:Windows 系统全局限速,或在域环境中通过组策略部署。

使用 trickle 命令(Linux 轻量级方案)

适合非 root 用户或限制单个程序的网络带宽。

# 安装
sudo apt install trickle
# 限制 scp 命令的上传速度为 500KB/s
trickle -u 500 scp largefile.zip user@remote:/destination/
# 也可以设置下载限制 -d 参数

使用场景:临时限制某个命令或程序,特别是没有 root 权限时。


如何选择

场景 推荐方案
服务器/系统级,影响所有流量 tc 命令 (方案1)
快速调整,不想深究网络原理 wondershaper (方案2)
应用级,只限制特定程序 应用内置参数或 trickle (方案3/5)
Windows 系统 PowerShell 方案 (方案4)

关键提示

  1. 权限问题:方案1、2需要 root 权限,方案5的 trickle 在某些配置下也可能需要。
  2. 接口名称:在 Linux 上,请先用 ip addr 命令确认您的网络接口名称(如 eth0ens33wlan0)。
  3. 带宽单位:注意各工具的单位区别(kbit vs KB/s vs Mbit),避免误设,1 Mbit/s ≈ 125 KB/s。
  4. 持久化tc 规则在系统重启后会失效,若需要持久化,请将脚本添加到开机启动项(如 systemd 服务或 /etc/rc.local)。
  5. 测试效果:修改后,建议使用 iperf3 -c <服务器> -R(反向测试)验证上传限速是否生效。

希望这份指南能帮助您成功实现上传限速,如果您的环境或需求比较特殊(例如在 macOS 上,或限制的是 VPN 流量),请告诉我,我会为您提供更具体的指导。

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