天天看點

扒站wget仿站wget 下載下傳整個網站(扒站)及如何避開 robots.txt 限制下載下傳防止Wget下載下傳整站關于wget使用的一個有趣玩法

wget -c -r -p -np -k http://xxx.com/xxx      

其中:

-c, --continue (斷點續傳) 接着下載下傳沒下載下傳完的檔案

-r, --recursive(遞歸) specify recursive download.(指定遞歸下載下傳)

-p, --page-requisites(頁面必需元素) get all images, etc. needed to display HTML page.(下載下傳所有的圖檔等頁面顯示所需的内容)

-np, --no-parent(不追溯至父級) don't ascend to the parent directory.

-k, --convert-links(轉換連結) make links in downloaded HTML point to local files.(将下載下傳的HTML頁面中的連結轉換為相對連結即本地連結)

wget -r -p -k -np [網址]

參數說明:

-r : 遞歸下載下傳

-p : 下載下傳所有用于顯示 HTML 頁面的圖檔之類的元素

-k : 在轉換檔案 X 前先将它備份為 X.orig。

-np: 不追溯至父目錄

$ wget -r -np -nd http://example.com/packages/

這條指令可以下載下傳 http://example.com 網站上 packages 目錄中的所有檔案。其中,-np 的作用是不周遊父目錄,-nd 表示不在本機重新建立目錄結構。

$ wget -m -k (-H) http://www.example.com/

該指令可用來鏡像一個網站,wget 将對連結進行轉換。如果網站中的圖像是放在另外的站點,那麼可以使用 -H 選項。

$ wget -r -np -nd –accept=iso http://example.com/centos-5/i386/

與上一條指令相似,但多加了一個 –accept=iso 選項,這訓示 wget 僅下載下傳 i386 目錄中所有擴充名為 iso 的檔案。你也可以指定多個擴充名,隻需用逗号分隔即可。

$ wget -i filename.txt

此指令常用于批量下載下傳的情形,把所有需要下載下傳檔案的位址放到 filename.txt 中,然後 wget 就會自動為你下載下傳所有檔案了。

$ wget -c http://example.com/really-big-file.iso

這裡所指定的 -c 選項的作用為斷點續傳。

$ wget -m -k (-H) http://www.example.com/

該指令可用來鏡像一個網站,wget 将對連結進行轉換。如果網站中的圖像是放在另外的站點,那麼可以使用 -H 選項。-l, –level=NUMBER 最大遞歸深度 (inf 或 0 代表無窮)。

最後一條就是用來鏡像一個網站的,簡單有效,速度超快,鏡像下來網站檔案結構,代碼都完整無須修改。

wget 下載下傳整個網站(扒站)及如何避開 robots.txt 限制下載下傳

腳本如下:

#!/usr/bin/env bash

#腳本作用:網站下載下傳
#使用方式:執行腳本,後面跟網站的URL,需要帶 http://xxxx.xxxx.com/

set -e

#定義站點克隆路徑:
WEBDIR='/data/wwwroot'

#确定系統有wget
[ -z "$(rpm -qa wget)" ] && yum install -y wget

#确認下載下傳目錄:
[ ! -d ${WEBDIR} ] && mkdir -p ${WEBDIR}

#使用斷點續傳的方式下載下傳網站
wget -nc -r -p -k -np -P ${WEBDIR}/ $1

# -nc 斷點續傳
# -r, --recursive(遞歸) specify recursive download.(指定遞歸下載下傳)
# -k, --convert-links(轉換連結) make links in downloaded HTML point to local files.(将下載下傳的HTML頁面中的連結轉換為相對連結即本地連結)
# -p, --page-requisites(頁面必需元素) get all images, etc. needed to display HTML page.(下載下傳所有的圖檔等頁面顯示所需的内容)
# -np, --no-parent(不追溯至父級) don't ascend to the parent directory.
#另外 日志 用-o參數
           

或者使用:

#!/usr/bin/env bash

#腳本作用:網站下載下傳
#使用方式:執行腳本,後面跟網站的URL,需要帶 http://xxxx.xxxx.com/

set -e

#定義站點克隆路徑:
WEBDIR='/data/wwwroot'

#确定系統有wget
[ -z "$(rpm -qa wget)" ] && yum install -y wget

#确認下載下傳目錄:
[ ! -d ${WEBDIR} ] && mkdir -p ${WEBDIR}

#使用斷點續傳 的方式下載下傳網站
wget -nc -m -p -k -P ${WEBDIR}/ $1


# -nc 斷點續傳
# -m or --mirror開戶鏡像下載下傳
# -p下載下傳所有為了html頁面顯示正常的檔案
# -k or --convert-links下載下傳後,轉換成本地的連結
# -P ./LOCAL儲存所有檔案和目錄到本地指定目錄
           

如果有些站點禁止了SEO 收錄,那麼有可能下載下傳的隻能下載下傳一個robots.txt 檔案,此時,我們可以使用 -e 參數,即腳本:

#!/usr/bin/env bash

#腳本作用:網站下載下傳
#使用方式:執行腳本,後面跟網站的URL,需要帶 http://xxxx.xxxx.com/

set -e

#定義站點克隆路徑:
WEBDIR='/data/wwwroot'

#确定系統有wget
[ -z "$(rpm -qa wget)" ] && yum install -y wget

#确認下載下傳目錄:
[ ! -d ${WEBDIR} ] && mkdir -p ${WEBDIR}

#使用斷點續傳及避開robots.txt 的方式下載下傳網站
wget -e robots=off -nc -m -p -k -P ${WEBDIR}/ $1


# -nc 斷點續傳
# -m or --mirror開戶鏡像下載下傳
# -p下載下傳所有為了html頁面顯示正常的檔案
# -k or --convert-links下載下傳後,轉換成本地的連結
# -P ./LOCAL儲存所有檔案和目錄到本地指定目錄
           

有些網站限制了WGET 通路,此時我們可以使用參數 -U ,即使用 –user-agent=AGENT 使用 AGENT 取代 Wget/VERSION 作為識别代号:

[[email protected] ~/wwwroot 09:56:15]#wget -e robots=off -nc -m -p -k -U "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 LBBROWSER" -P ./ www.gcbet8.com
           

防止Wget下載下傳整站

找到你站點的Nginx配置檔案位址(使用yum,apt-get安裝的Nginx,通常會在/etc/nginx/conf/ 或 /usr/local/nginx/conf/)

添加以下配置:

server {
    listen 80;
    server_name 你的域名.com www.你的域名.com;
    rewrite ^(.*)$ http://你的域名.com$1permanent;
    location / {
    if ($http_user_agent ~* (wget|ab) ) {
    return 403;
    }
    if ($http_user_agent ~* LWP :: Simple|Wget) {
    return 403;
    }
}
}      

亦可設定成 return 444;   這樣對方不會收到403錯誤資訊,隻會像網站緩慢無法連結.

儲存并重新開機Nginx

編輯完儲存後,執行

service nginx restart    重新開機Nginx      

至此,Nginx配置防扒完成。

關于wget使用的一個有趣玩法

很多人玩linux差不都會用wget來下載下傳一些檔案來配置或者安裝軟體,當然也有人會用它來遞歸下載下傳的你的網站内容,下面介紹一下如何配置Nginx實作防止别人通過wget下載下傳你的網站内容和如何破解因為Nginx或Apache設定禁止wget或curl。

防止Wget遞歸下載下傳

假設Nginx預設配置檔案所在目錄:

/usr/local/nginx/conf/vhost

wget的預設User Agent是GNU/Linux,wget,是以我們隻需要阻止該UA的通路并傳回403即可。

Nginx配置如下:

if ($http_user_agent ~* (Wget|ab) ) {
   return 403;
}
 
if ($http_user_agent ~* LWP::Simple|BBBike|wget) {
            return 403;
}
           

擴充:

Nginx中有一個獨特的HTTP 444狀态,如果配置return 444,那麼對方就不會收到錯誤資訊,看起來就像是網站伺服器打開緩慢導緻無法連接配接一樣。

破解禁止wget或curl下載下傳

某些網站設定了網站伺服器或者iptables的參數禁止wget/curl的通路,讓我們不能愉快地扒站了怎麼辦?其實大部分隻是禁止了wget/curl的User Agent,我們隻需要給他們設定一個正常的浏覽器UA即可。

臨時變更wget的UA

在wget前加上參數 

-U

,代表設定User Aagent

wget www.google.com -U ‘Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101
           

永久變更Wget的UA

添加以下代碼到/etc/wgetrc

header = User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0
           

變更curl的UA

使用以下參數:

curl www.google.com --user-agent "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0"
           

同時,curl也可以傳遞refer資訊來跳過某些防盜鍊設定:

curl -e http://www.google.com http://www.linpx.com
           

這代表從Google跳轉到我們的網站.

Ok,就這樣···