AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1063567
Accepted
carveone
carveone
Asked: 2021-05-15 08:33:20 +0800 CST2021-05-15 08:33:20 +0800 CST 2021-05-15 08:33:20 +0800 CST

Windows 更新服务器返回 Content-Length: 0 对于某些网络

  • 772

有谁知道为什么 Windows 更新服务器(即:download.windowsupdate.com)会在某些网络上给出看似虚假的回复?以 MSE 补丁为例,我使用 4G 移动网络 (Vodafone) 获得以下标头。为简洁起见,我将响应缩减了一点。

curl -I "http://download.windowsupdate.com/d/msdownload/update/software/defu/2021/05/am_delta_6a3649beb57cee48081bd31631c8774de6505d2f.exe"

HTTP/1.1 200 OK
Accept-Ranges: bytes
Age: 8995
Content-Type: application/octet-stream
Date: Fri, 14 May 2021 13:59:10 GMT
Server: ECAcc (lha/8DA7)
Content-Length: 0
Connection: keep-alive

请注意无效的 Content-Length,尤其是与 keep-alive 一起使用。这不会发生在我们由 UPC/Virgin Media 提供的主网络上。Content-Length 是该网络上的有效数字。

有内容(一个几兆字节的 .exe 文件),curl 可以很好地处理它——我猜它会检查 read() 是否返回更多字节,如果有,则忽略 Content-Length。适合卷曲。

然而,旧版本的 BITS 似乎不能很好地处理这个问题。在 VM 中使用 Windows 7 Pro,BITS 开始循环运行 - 它一遍又一遍地写入 C:\ProgramData\Microsoft\Network\Downloader\qmgr0.dat,直到我执行“网络停止位”。这使用 100% 磁盘,并且实际上是针对 Windows 7 的 DOS。

我知道 Windows 7 不支持,但我最初在 Windows Server 2016 中看到了这个问题。我现在承认这可能已经是一个已知的错误并且可能已经被修补,但我不知道如何找出(除了在合适的机器上进行测试,当我获得访问权限时。这是与 Covid 19 相关的困难!)

据我所知,BITS 是为 Windows 10 重写的,所以它可能没有同样的问题。不过,这很有趣!

windows-update windows-server-2016 bits
  • 1 1 个回答
  • 119 Views

1 个回答

  • Voted
  1. Best Answer
    carveone
    2021-07-16T03:56:05+08:002021-07-16T03:56:05+08:00

    这似乎是针对 Windows 10 之前版本的 Windows 更新的有效 DOS 类型错误。已向 MSRC 报告,但报告已关闭,因此我不明白为什么我不能披露。对于那些感兴趣的人,报告复制在:https ://github.com/conoror/wudos

    我可以通过将 mitmproxy 配置为透明代理和一个与 HEAD 响应混淆的 Python 插件轻松重现这一点(Win7 ESU 2021 年 6 月):

    from mitmproxy import ctx
    
    class ZeroContentLength:
        def response(self, flow):
            if "msdownload" in flow.request.pretty_url and \
                    flow.request.method == "HEAD" and\
                    "Content-Length" in flow.response.headers:
                ctx.log.info("Msdownload HEAD of len %s seen and set to 0" %
                                flow.response.headers["Content-Length"])
                flow.response.headers["Content-Length"] = '0'
    
    addons = [
        ZeroContentLength()
    ]
    

    在这种情况下,将自己定位为透明代理可能并非易事,因此它可能并不重要。我换了提供商来解决这个问题。

    • 0

相关问题

  • Sonicwall 和 Windows 更新

  • 仅在特定工作日(和时间)安排 Windows 更新?

  • 如何诊断无法在 Windows Server 2003 上安装更新的原因?

  • 如何防止重要的 Windows 更新后重新启动机器?

  • 如果 .NET Framework 未安装,我该怎么办?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve