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次封包囉

信心

和老師談完了之後,不可否認的,我又被說動了,但這是建立在我相信老師的基礎上
談完之後再跟其他人交叉比對得到的資料,發現老師的回答一直在避重就輕,這讓我對老師的信心又打了折扣
於是我不得不擔心是否老師又再使用一貫的伎倆,拖字訣

失去信任的後果很可怕,那代表對方說的任何話,給的任何承諾,你都無法完全的信任,會疑東疑西,這個代價真的很高

怎麼辦,讀還是不讀?

其實細細回想,我不只是失去對別人的信任,同時失去的還有對自己的信心,從前的我對自己很有信心
其實即使我對老師沒有了信心,我也應該要對自己很有信心才對

最理想的結果,是應該我除了很相信別人之外,也應該要很相信自己才對

相信別人,相信自己

人生中總難免會遇到這麼一道牆,跨過去了他就是一個坎,跨不過去他就是一道山