
我正在嘗試編寫一個 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/
也強烈建議您使用-Nwget 上的標誌來檢查時間戳記。只有當 ComboFix 比您電腦上的版本更新時,才會下載 ComboFix。
還要確保您的腳本每天只運行一次或兩次。無需運行更多。
透過限制請求並使用 -N,您應該避免被我們的腳本自動禁止。
謝謝