2007年7月3日 星期二

利用NC重複送網頁以及批次檔迴圈的技巧

首先是要問為什麼會有這麼一個需要?

首先,現在的網頁都會有網頁小遊戲,比如養養寵物之類的
而事件的起因是因為飼養寵物需要一直click網頁,久了之後我覺得很煩
於是想到能不能利用自動化來達成這個目的

如果有現成的工具可以使用那當然是最好的,可是搜尋了我腦中那貧乏的資訊實在想不到有什麼軟體是這種用途的
本來是想自己寫一支程式來達到目的,但是實在因為太懶,所以開始思考其他solution,而從一開始就沒有想過使用按鍵精靈來達到這個目的,因為按鍵精靈不能在背景執行,用了它你就不能用電腦,而且不夠彈性.....

於是很自覺得想到了nc,號稱網路中的瑞士小刀這個小工具
nc是netcat的簡稱,如果你google netcat,你會得到很多資訊及很多用法,這裡不贅述
初步的解決了用nc送封包的問題之後,第二個遇到的問題是自動化,自覺的想到批次檔,可是批次檔怎麼使用迴圈?
在批次檔中使用迴圈就是這篇文章最主要的價值了,而結合了使用nc送封包的技巧我們就可以達到我們原始的目的

那就是"自動化的重複click網頁"

1.使用nc送封包

要送封包之前你需要先學會裝封包,使用ethereal(現改名為wireshark)抓下你要重送封包,也就是你按下網頁中的按鈕之後送出去的封包
封包抓下來後將其存成純文字檔,封包的內容如下所示,通常應該都是POST開頭,這代表你對http server送出資訊

=========封包內容=======
POST /mybook_pettrain.asp HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
Referer: http://www.cmfu.com/mybook/pet.asp
Accept-Language: zh-tw
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Maxthon)
Host: http://www.cmfu.com/
Content-Length: 22
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ASPSESSIONIDQCDSRCCD=ANAPHFNADMHIBCEOFFOFJIBB; AD=RFPop=1; cmfu=showbookdate=2007%2D3%2D22+13%3A37%3A57&logintype=1&bookid=0%2C105687%2C; PopAd=120=1&10=1&122=1; ASPSESSIONIDQABTRCDD=FPJPHFNAFAOJAMGMAFKPMCLN; pop_times=1; login=loginno=2&ip=211%2E75%2E42%2E221; ASPSESSIONIDQACRSCCC=FFPOHFNAGAOPMMPCFPBMLOHL; myVouch=isPop=1; Validate=Code=ee3f5d290674793e&Time=2007%2D3%2D22+13%3A38%3A09; ASPSESSIONIDCSQTQCCT=MHEHJFNAOKHCAABBNDLNJOJE; ASPSESSIONIDCQTQTBDT=LHCFJFNAEDOJCOFOBMHGAEPF; ASPSESSIONIDASTTSBCS=OOPFJFNAALCCLLCHFIJDPBIL; logincmfu=user%5Finfo=170f4f4ab606c099&user%5Fnickname=edgardwu&user%5Fname=edgard&Regtime=2006%2D4%2D20+10%3A13%3A56&user%5Ftype=0&userid=3911283&user%5Fid=3911283&id%5Fpt=457130262&user%5Fpt=edgard; cmfu=logintype=1&bookid=0%2C; cmfubbs=score=6263%2E203; cmfualert=alert=1
pet_train=1&petname=11
=========封包內容=======

有了封包之後,假設封包的內容為cmfu.txt,那麼使用nc傳送封包的指令如下nc -n -w 2 202.102.54.20 80 <>> c:\cmfu.html-n 代表使用ip,不用domain name-w 2 表示連線的存活時間為兩秒<>> c:\cmfu.html 表示將reply的結果append到cmfu.html中,reply的內容通常都是恭喜你,你的寵物上升了幾點之類的於是現在你每執行一次這個指令就等同於click一次網頁的效果

2.批次檔中使用迴圈

一次只送一次網頁我們還是不能滿足,畢竟我們最原始的目標是自動化批次檔中使用迴圈的範例如下

=========批次檔內容=========
@echo offfor /L %%a in (1,1,20) do {
echo 第%%a次
nc -n -w 2 202.102.54.20 80 <>> c:\cmfu.html
}
=========批次檔內容=========

for /L %%a in (1,1,20) /L表示使用loop,%%a為變數名稱(不需要預先宣告),in (1,1,20)代表變數從1開始,到20結束,每次加1
被{}包起來的內容即為我們想要執行迴圈的內容了
echo 第%%a次 讓我們知道現在在跑第幾次迴圈
於是當我們執行這個批次檔,就等於重送20次封包囉

沒有留言: