徐文濤
摘要:隨著因特網的發展,出現了諸如手機短信、Email、即時通訊、論壇等基于互聯網的交流工具,用戶廣泛。利用這些工具的信息群發系統可以向大量受眾發送網絡信息,在企業推廣、輿論宣傳等方面具有重要的應用價值。作為網絡信息群發系統的一個子課題,本文擬針對國內流行的Discuz論壇作研究并實現一個基于網頁元素的論壇帖子群發技術,該技術可以支持同時對多個Discuz論壇完成賬號注冊、登錄、帖子群發、帖子持續回復、注銷退出等操作。與現有常見的論壇帖子群發系統相比,本文研究并實現的論壇帖子群發技術基于網頁元素,具有穩定可靠、實現方便、易于擴展等優點。
關鍵詞:信息群發,論壇,網頁元素
0.研究背景
隨著國際互聯網和移動通信網的發展,人們已習慣于使用手機短信、即時通訊工具、電子郵件、論壇帖子等基于網絡的通訊工具(以下簡稱網絡通訊工具)進行信息交流。網絡通訊工具具有使用方便、成本低、受眾面廣等優點。
網絡信息群發系統定義為一種可以向移動通信手機用戶和國際互聯網用戶批量發送手機短信、電子郵件、即時通信消息、論壇帖子等網絡信息的軟硬件平臺,在短時間內充分利用各類網絡資源的發送能力,將己方設計好的信息送達上述目標受眾群體。
網絡信息群發系統具有極高的應用價值,例如企業使用網絡信息群發系統向所屬員工發送網絡信息可以達到日常管理的目的,政府機構向一定范圍的民眾發送網絡信息可以達到引導輿論的目的,一國向敵方或第三方民眾發送網絡信息可以達到影響敵方或第三方民眾心理的作用,通過研究網絡信息群發技術的原理可以采取技術手段屏蔽非法網絡信息群發技術,等等。
論壇帖子群發系統屬于網絡信息群發系統的一個子系統。論壇群發系統又名灌水機、發帖機等,顧名思義,它是可以實現同時向多個論壇注冊賬號、登錄、發送帖子、回復帖子等操作的軟件,是網絡推廣的一種手段,一般用于商業目的或者輿論宣傳。論壇帖子群發系統一般由注冊、發帖、監控等幾個模塊組成,用戶通過軟件的窗口就能完成帖子群發,其他的工作由后臺程序處理,一般比較好的論壇帖子群發系統能夠支持主流的論壇技術,如Discuz、PHPwind、Dvbbs等。本文主要針對目前國內主流的Discuz論壇系統研究論壇帖子群發技術。
1.研究現狀
一般的論壇帖子群發系統操作過程是構造用戶計算機向論壇服務器提交的post表單內容,實現代碼對論壇的操作。C#一般使用類HttpWebRequest實現模擬連接論壇以及向服務器提交post表單,使用類HttpWebResponse實現接受服務器的響應信息,使用類StreamReader實現響應信息的讀取。要實現同時對多個不同論壇的不同版塊發帖,則要利用編程中的多線程機制,循環上訴單次發帖過程即可,但是模擬報文中必須提交一個值formhash,而這個值是Discuz論壇系統根據登錄系統的用戶信息生成的,這個值較難獲取。
2.基于網頁元素的論壇帖子群發技術
2.1 Discuz論壇發帖中涉及的網頁元素
本課題基于網頁元素的論壇帖子群發技術中的網頁元素是指在Discuz論壇網頁中需要用戶輸入、選擇、點擊的網頁html基本元素,主要是指表單元素和鏈接元素。用戶對論壇的操作就是通過這些網頁元素進行的。如在登錄頁面中,基本的網頁元素有賬號輸入框、密碼輸入框、登錄按鈕,為了防止惡意自動灌水,很多Discuz論壇都設置了驗證碼輸入框。
2.2基于網頁元素的單個帖子發送技術
基于網頁元素實現登錄的原理是用.net framework中的類HtmlElement代表Webbrowser中的密碼輸入框、賬號輸入框、提交按鈕等網頁元素,然后用類HtmlElement中的方法填入這些表單元素的值并提交,從而實現登錄。下面通過利用控件Webbrowser登錄論壇“小文之家“的例子來對基于網頁元素的單條帖子發送原理進行詳細分析。
從本例可以看出,用控件Webbrowser登錄論壇非常簡單,主要的代碼也就六行,這種方法利用的是網頁表單元素填充機制。
分析以上的網頁源代碼和C#代碼,可知用C#的web類HtmlElement的三個對象可以分別代表賬號輸入框、密碼輸入框、登錄按鈕等網頁元素,用HtmlElement的方法SetAttribute給這些表單賦上相應的值,如給賬號輸入框賦上賬號,給密碼輸入框賦上密碼,而 HtmlElement的方法InvokeMember可以模擬各種網頁操作,如InvokeMember("click")可以模擬對按鈕進行點擊,用它就可以向服務器提交表單中的值,從而實現登錄。以上舉的是一個登錄論壇的例子,發帖與登錄的原理是一樣的,用控件Webbrowser模擬發帖實際上相當于模擬人工直接在網頁上填寫表單并提交。
基于網頁元素的發帖技術從本質上來說也是模擬HTTP報文對論壇進行操作,只是這種技術采用C#中比較高級的類HtmlElement,它屏蔽了底層的數據通訊格式,用戶不需要關心論壇通信過程中http報文的具體格式,這就繞過Discuz論壇為了防止用戶惡意自動灌水而設的formhash值,而從論壇看來,通過這種技術發帖就如同用戶手工操作論壇發帖一樣。基于網頁元素的發帖技術比一般的發帖方法更加簡單、高效。
2.3多個論壇帖子群發技術
本課題采用控件Webbrowser獲取網頁元素發帖,如果只用一個Webbrowser,那么每發一次帖,都必須在這個控件內經歷連接論壇、注冊、登陸、發帖、回復、注銷退出等過程,顯然,如果只用一個Webbrowser來實現在多個Discuz論壇上群發帖子,效率是很低的,所以在本課題中,我們采用多個Webbrowser實現群發。
用代碼動態生成控件Webbrowser,就可以用多個Webbrowser實現群發。如同時向五個論壇發帖,動態生成五個Webbrowser,每個Webbrowser負責向一個論壇發帖,這樣就實現了帖子群發,而每個Webbrowser各自在其負責的Discuz論壇內完成連接、注冊、登錄、發帖、回復、注銷退出等操作,互不干擾,所以群發的效率還是比較高的。
3.結論與展望
隨著信息時代的到來,網絡將越來越流行,而論壇作為重要的網絡交流工具,因為其開放性強、影響面廣、門欄低等特點,也必將顯現巨大的作用,由此可見,論壇帖子群發系統作為一種廉價而方便的信息宣傳工具,還是有相當大的開發價值的。本文對國內流行的Discuz論壇作了研究,并實現了一個基于網頁元素的論壇帖子群發技術,該技術可以同時對多個Discuz論壇完成賬號注冊、登錄、帖子群發、帖子持續回復、注銷退出等操作。
本文分析了目前國內主流的Discuz論壇的工作過程和結構特點,給出了論壇帖子群發的原理,利用.net framework平臺的優勢和web網頁的結構特點,研究了發帖過程中涉及到的網頁元素以及如何識別與獲取這些網頁元素,在此基礎上提出了一種基于網頁元素的論壇帖子群發技術,描述了其工作過程和關鍵算法。相對于一般的論壇帖子群發系統,本系統有實現簡單、穩定高效、易于擴展的特點,更重要的是,本系統的實現基于C#的高級網頁類HtmlElement,利用它可以不必關心底層的數據通信結構,同時也就繞過了Discuz論壇為了防止灌水而設的值formhash。
由于時間和精力的限制,本文對論壇帖子群發技術的研究還不夠透徹,基于網頁元素的論壇帖子群發系統還有一些需要改進的地方,下一步研究的工作主要是:
1)擴展可發帖的論壇類型。本課題的研究是基于Discuz論壇的,由于基于網頁元素的論壇帖子群發技術不需要關心底層的HTTP通信數據結構,所以很容易在稍加修改或者不必修改的情況下就能輕松支持其他版本的論壇。
2)自動識別填寫驗證碼。現在許多因特網上的論壇都加了圖片驗證碼防止用戶惡意自動灌水,要真正實現在所有的論壇無障礙群發帖子,必須解決圖片驗證碼的識別與自動填寫問題。
3)實現自動注冊。本系統雖然可以同時進行多個Discuz論壇的賬號注冊,但是注冊過程中需要手動填寫用戶名和密碼等信息,要提高發帖效率,就必須讓系統自動生成可用的用戶名和密碼進行全自動注冊。
4)實現附件和帖子圖片添加功能。這些功能可以讓群發的信息內容更加豐富,更加吸引人。
參考文獻:
[1] 陳慧玲,帥立國,姜昌金.基于HTTP協議的論壇群發技術的研究[J].計算機技術與發展,2007,17(3):37-39.
[2] 石青論壇群發大師.http:www.crsky.com,2011-05-15.
[3] Charles M.Kozierok.The TCP/IP Guide:A Comprehensive Illustrated Internet Protocols Reference [M].San Francisco:No Starch Press,2005.
[4] 謝希仁.計算機網絡[M].第4版.北京:電子工業出版社,2003.
[5] Robin Nixon.Learning PHP,MySQL,and JavaScript [M].Sebastopol:OReilly,2009.
[6] Davis,F.,Kahle,B.,Morris,H.,Salem,J.,Shen,T.,Wang,R.,Sui,J.,and M.Grinbaum,"WAIS Interface Protocol Prototype Functional Specification",(v1.5),Thinking Machines Corporation,April 1995.