我正在尝试编写一个 shell 脚本来获取 ComboFix 所在的动态 URLBleepingComputer.com/download/combofix
但是,出于某种原因,如果下载不起作用,我似乎无法让我的正则表达式匹配“单击此处”的下载链接。我使用了正则表达式测试器,它说我匹配了链接,但我执行它时似乎无法让它工作,它会出现一个空结果。这是我的整个脚本:
#!/bin/bash
# Download latest ComboFix from BleepingComputer
wget -O Listing.html "http://www.bleepingcomputer.com/download/combofix/" -nv
downloadpage=$(sed -ne 's@^.*<a href="\(http://www[.]bleepingcomputer[.]com/download/combofix/dl/[0-9]\+/\)" class="goodurl">.*$@\1@p' Listing.html)
echo "DL Page: $downloadpage"
secondpage="$downloadpage"
wget -O Download.html $secondpage -nv
file=$(sed -ne 's@^.*<a href="\(http://download[.]bleepingcomputer[.]com/dl/[0-9A-Fa-f]\+/[0-9A-Fa-f]\+/windows/security/anti[-]virus/c/combofix/ComboFix[.]exe\)">.*$@\1@p' Download.html)
echo "File: $file"
wget -O "ComboFix.exe" "$file" -nv
rm Listing.html
rm Download.html
mkdir Tools
mv "ComboFix.exe" "Tools/ComboFix.exe" -f
前两次下载均成功完成,最终我得到: http://www.bleepingcomputer.com/download/combofix/dl/12/
但它无法匹配最终为我提供下载链接的 sed。
它应该匹配的代码是:
<a href="http://download.bleepingcomputer.com/dl/6c497ccbaff8226ec84c97dcdfc3ce9a/5058d931/windows/security/anti-virus/c/combofix/ComboFix.exe">click here</a>
解决方案:
对于任何感兴趣的人,最终有效的代码是:
#!/bin/bash
# Download latest ComboFix from BleepingComputer
wget -O Download.html "http://www.bleepingcomputer.com/download/combofix/12" -nv
file=$(sed -ne 's@^.*<a href=\x27\(http://download[.]bleepingcomputer[.]com/dl/[0-9A-Fa-f]\+/[0-9A-Fa-f]\+/windows/security/anti[-]virus/c/combofix/ComboFix[.]exe\)\x27>.*$@\1@p' Download.html)
echo "File URL: $file"
wget -OSN "ComboFix.exe" "$file" -nv
答案1
这很有趣:我刚刚去了http://www.bleepingcomputer.com/download/combofix/dl/12/并发现
<a href='http://download.bleepingcomputer.com/dl/587c6038..../..../ComboFix.exe'>点击此处</a>。
即 URL 由单引号分隔 (‘) 而不是双引号 (“)(这就是您的sed
命令所寻找的)。
答案2
无需下载第一页,因为第二页是静态的。它始终是:
http://www.bleepingcomputer.com/download/combofix/dl/12/
强烈建议您使用-N在 wget 上标记以检查时间戳。这只会在 ComboFix 比您计算机上的版本更新时下载它。
另外,请确保您的脚本每天只运行一到两次。没有必要运行超过两次。
通过限制请求并使用-N,您应该避免被我们的脚本自动禁止。
谢谢