收起左侧

利用Docker,定时刷下载流量,规避运营商PCDN误判限速教学

1
回复
71
查看
[ 复制链接 ]

3

主题

7

回帖

0

牛值

江湖小虾

根据这篇“是时候出手了,规避运营商PCDN误判限速”,配置使用后下载源可能无效了,没办法正常用,现在以更换微软下载镜像,因为个人的特殊癖好,不想一直都在下载,所以我用豆包修改了部分代码,增加一个自定义设置项,可以修改运行日期和时间、下载速度、单次下载文件大小、检测时间,下载链接等,并添加了注释,二创产品写的不好,大家轻喷,谢谢!!!


version: '3'  # Docker Compose版本
services:
  traffic-keeper:  # 服务名称
    image: alpine:latest  # 使用Alpine Linux镜像(轻量级)
    container_name: net-flow-generator  # 容器名称
    restart: unless-stopped  # 重启策略:除非手动停止,否则自动重启
    logging:  # 日志配置部分
      driver: "json-file"  # 使用JSON格式记录日志
      options:  # 日志选项
        max-size: "5m"  # 单个日志文件最大5MB
        max-file: "3"  # 最多保留3个日志文件(自动轮转)
    tmpfs:  # 临时文件系统挂载(内存中)
      - /tmp  # 将/tmp目录挂载到内存中,提高IO性能
    command:  # 容器启动后执行的命令
      - /bin/sh  # 使用shell解释器
      - -c  # 执行后面的字符串命令
      - |  # 多行命令开始
        # 第一步:配置Alpine包管理器使用阿里云镜像(加速下载)
        sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
        # 第二步:安装curl工具(用于HTTP下载)
        apk add --no-cache curl
        # 第三步:输出启动信息
        echo "流量保镖服务启动...开始平衡你的上下行比例"
  
        # 第四步:主循环(无限循环)
        while true; do
          # 生成随机数:1-10次下载任务(模拟用户行为随机性)
          # $$RANDOM是Alpine ash shell的随机数变量(0-32767)
          # expr $$RANDOM % 10:取0-9的余数
          # +1:变成1-10
          RUN_TIMES=$$(expr $$RANDOM % 10 + 1)
          # 输出本轮任务信息(日期时间格式:年-月-日 时:分:秒)
          echo "$$(date +'%F %T'): 本轮将连续执行$${RUN_TIMES}次下载任务..."
    
          # 第五步:执行连续下载任务
          i=1  # 初始化计数器
          # 使用while循环(兼容Alpine的ash shell,不支持bash的for((i=1;i<=N;i++))语法)
          while [ $${i} -le $${RUN_TIMES} ]; do
            # 输出当前下载任务信息
            echo "$$(date +'%F %T'): 执行第$${i}/$${RUN_TIMES}次下载任务..."
          
            # 第六步:执行curl下载命令(整行书写避免参数解析问题)
            # curl参数详解:
            # -L:跟随重定向
            # -o /dev/null:下载内容丢弃到空设备(不保存文件)
            # -#:显示进度条
            # -S:显示错误信息
            # --limit-rate 10M:限制下载速度为10MB/秒(约80Mbps)
            # -H 'Cache-Control: no-cache':添加HTTP头,禁用缓存
            # -A "Mozilla/5.0...":设置User-Agent,模拟Chrome浏览器
            # --connect-timeout 15:连接超时15秒
            # --max-time 3600:最大执行时间1小时
            # --retry 5:失败重试5次
            # --retry-delay 10:重试间隔10秒
            # -w "...": 下载完成后输出的格式化信息
            #    %{time_total}s:总耗时(秒)
            #    %{speed_download}B/s:平均下载速度(字节/秒)
            #    %{http_code}:HTTP状态码
            # "https://...":下载的URL(微软Windows更新文件)
            # || echo "...": 如果curl命令失败(返回非0),执行后面的echo
            curl -L -o /dev/null -# -S --limit-rate 10M -H 'Cache-Control: no-cache' -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" --connect-timeout 15 --max-time 3600 --retry 5 --retry-delay 10 -w "\n结果: 耗时%{time_total}s | 均速%{speed_download}B/s | 状态%{http_code}\n" "https://catalog.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/b7aa64b3-8441-4d36-b8f7-409f3cfeac1c/public/windows11.0-kb5074109-x64_fe29a336e6e650dda4038e82bcc0c6286c70b9a1.msu" || echo "第$${i}次下载异常,继续执行下一次..."
          
            # 第七步:计数器递增(Alpine ash语法)
            # expr $${i} + 1:计算i+1的值
            i=$$(expr $${i} + 1)
          done  # while循环结束
    
          # 第八步:一轮下载完成后,随机休息一段时间
          # 生成1-600秒的随机休息时间
          RANDOM_SLEEP=$$(expr $$RANDOM % 600 + 1)
          # 输出休息信息
          echo "$$(date +'%F %T'): 本轮$${RUN_TIMES}次任务执行完毕,随机休息$${RANDOM_SLEEP}秒..."
          # 执行休眠
          sleep $${RANDOM_SLEEP}
        done  # 主while循环结束(无限循环)

【Q&A 常见问题】

  • Q:这会影响我打游戏/看电视吗?
    • A:脚本里限制了 10M (大约100Mbps) 的速度,现在的宽带一般都是300M、500M起步,这点占用几乎无感。如果你的宽带比较小,可以把 10M 改小一点,比如 5M
  • Q:为什么选下载 微软官方Windows更新文件
    • A:大厂节点,速度快且稳定,且模拟访问 微软官方 的流量看起来比较“正常”。
  • Q:真的不伤硬盘吗?
    • A:千真万确。curl 的输出被我重定向到了 /dev/null,在 Linux 里这就是个无底洞,数据流进去就消失了,根本不会经过文件系统写入磁盘。同时我也挂载了 tmpfs/tmp,确保临时文件在内存里解决。

【写在最后】

这种方法属于“物理规避”,主要是为了让流量图表好看一点,别让上行看起来像一根针,下行却是平的。

如果你也被限速过,或者担心被限速,建议部署一个挂着。反正 Docker 一开,平时也不用管它,稳稳的幸福!😎

觉得好用的兄弟,评论区回个“稳”字!

收藏
送赞 1
分享
一个做网络安全的小马蝼
神秘绿泡泡M1750402014521

3

主题

7

回帖

0

牛值

江湖小虾

4 小时前 楼主 显示全部楼层

稳!!!

一个做网络安全的小马蝼
神秘绿泡泡M1750402014521
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则