wget 命令基础用法与防盗链破解
wget 是一个功能强大的命令行下载工具,支持 HTTP、HTTPS 和 FTP 协议。它常用于批量下载文件、镜像网站以及处理需要特定请求头的下载场景。
核心参数说明
- -r:递归下载。对于 HTTP/HTTPS,会下载指定页面及其链接的资源(深度可调);对于 FTP,会下载指定目录下的所有文件。
- -m:镜像模式。相当于同时使用
-r和-N参数,适合创建网站镜像。 - -k:转换链接。下载完成后,将 HTML 文件中的绝对链接转换为相对链接,便于本地浏览。
- -N:时间戳检查。只下载比本地文件更新的文件(基于文件大小和修改时间)。
- -p:下载页面所需的所有资源(如图片、CSS、JS)。
- -np:不追溯至父目录。仅在指定目录及其子目录中递归。
- -nd:不创建目录结构。所有文件都下载到当前目录。
- --accept:指定接受的文件扩展名(如
--accept=iso,jpg)。 - --reject:指定拒绝的文件扩展名。
- -H:跨主机下载。当网站资源(如图片)托管在其他域名时使用。
场景示例
示例一:破解 Referer 防盗链
当目标网站通过检查 HTTP Referer 头来防盗链时,可以使用 --referer 参数伪造来路,从而下载受保护的文件。
wget -E --referer http://example.com/ -r -m -k http://img.example.com/2015/
此命令会:
- 设置 Referer 头为
http://example.com/。 - 递归下载
http://img.example.com/2015/目录下的所有文件。 - 启用镜像模式(
-m)和链接转换(-k)。
注意:Referer 防盗链是一种基础防护,现代网站常采用更安全的 token 验证、签名或 Cookie 校验等方式。对于此类高级防护,仅靠 wget 参数难以破解,可能需要分析其认证逻辑或使用更专业的工具。
示例二:无防盗链的整站下载
对于无防护的网站,可直接递归下载所有页面和资源。
wget -r -p -np -k http://xxx.com/xxx/
此命令会:
- 递归下载指定路径下的所有内容。
- 下载页面所需的所有资源(
-p)。 - 不追溯至父目录(
-np)。 - 转换链接为本地相对路径(
-k)。
示例三:下载特定目录下的文件
若只需下载某个目录下的文件,且不希望创建复杂的本地目录结构,可结合 -np 和 -nd 参数。
wget -r -np -nd http://example.com/packages/
此命令会:
- 递归下载
packages目录下的所有文件。 - 不追溯至父目录。
- 所有文件直接保存到当前目录,不创建子文件夹。
若要过滤文件类型,可添加 --accept 或 --reject 参数:
wget -r -np -nd --accept=iso http://example.com/centos-5/i386/
此命令仅下载扩展名为 .iso 的文件。
示例四:镜像整个网站(含跨域资源)
若要完整镜像一个网站,包括托管在其他域名上的资源(如图片、样式表),可使用以下命令:
wget -m -k -H http://www.example.com/
此命令会:
- 启用镜像模式(
-m)。 - 转换链接(
-k)。 - 允许跨主机下载(
-H),确保外部资源也被抓取。
注意事项与最佳实践
- 遵守法律法规与 robots.txt:在下载任何网站内容前,请确保你拥有相应权限,并遵守该网站的
robots.txt规则及相关法律法规。未经授权的抓取可能构成侵权。 - 控制请求频率:可添加
--limit-rate=200k限制下载速度,或使用--wait=2设置请求间隔,避免对目标服务器造成过大压力。 - 处理认证:若网站需要登录,可使用
--user和--password参数(注意密码安全),或通过--header添加 Cookie。 - 更新与维护:wget 命令参数可能随版本更新而变化,建议通过
wget --help或查阅官方文档获取最新信息。