许多服务器管理员希望他们的服务器只供人类使用,而不是被检索程序使用wget
。阻止此类程序的一种方法是使用日志分析. 日志分析通过寻找请求之间统计上显著的相似性(通常是通过时间来)来识别检索程序。
每当我尝试使用 wget 时通过 shell 脚本下载软件包(类似于 创建的软件包synaptic
,它们大多是由 创建的synaptic
),只有少数软件包被下载,而且大多数软件包由于以下原因而下载失败:连接被拒。
所以我强烈认为连接被拒绝的最可能原因是 Ubuntu 服务器使用日志分析来阻止程序。
Ubuntu 服务器是否使用日志分析来阻止(包检索)程序?
编辑:
我执行了一些包含小尺寸包的脚本(即,它们将在更短的时间内下载)。此类脚本按预期正常工作。如果包尺寸较大(因此需要更多时间),则会出现错误。
答案1
wget
有一个选项--random-wait
,旨在避免日志分析阻塞。从文档:
--random-wait
某些网站可能会执行日志分析,通过查找请求之间时间的统计显著相似性来识别 Wget 等检索程序。此选项会导致请求之间的时间在 0.5 到 1.5 * wait 秒之间变化,其中 wait 是使用该
--wait
选项指定的,以便从此类分析中掩盖 Wget 的存在。2001 年,一篇专门介绍流行消费平台开发的出版物中的文章提供了可即时执行此分析的代码。该文章的作者建议在 C 类地址级别进行阻止,以确保自动检索程序在更改 DHCP 提供的地址时仍被阻止。
这一
--random-wait
选项的灵感来自于这个不明智的建议,即由于一个人的行为而阻止许多不相关的用户访问网站。
因此,如果服务器在--random-wait
启用该选项的情况下接受您,而在未启用该选项的情况下不接受您,则很有可能它正在使用日志分析。
答案2
大多数镜像不受 Ubuntu 控制,其配置完全由系统管理员决定。因此,某些镜像可能会受到一些阻止。我个人认为为什么他们会这样做,但在默认设置下,wget
甚至在开始考虑行为跟踪之前,通过其用户代理字符串进行指纹识别就相当简单了。
你可以很简单地让它wget
看起来像当前的样子apt
:
wget -U "Ubuntu APT-HTTP/1.3 (0.9.9.1~ubuntu3)" ...
正如另一位用户指出的那样,如果你当前的镜像被某个不想让你使用的人控制wget
,你可以使用另一面镜子。有很多。