如何利用C#編寫網頁投票器程序 如何使用代理來投票 代理IP來投票

一、前言
看個圖,了解下投票的過程。
提交投票信息
投票頁 ――――――――>投票信息處理頁
反饋投票結果
(請求頁)<―――――――(響應頁)
一般情況下,填寫投票信息,然后點提交按鈕發送到響應頁,這樣來完成一個投票。這過程繁瑣,還不能多次投票。有時,手工投票達不到所期待的效果。
曾幫朋友弄過幾次投票,壇里有朋友也PM說要看看源代碼。投票器應該說沒有一個固定的框架,一些處理方法上需要視響應頁做針對性的改動。
自己寫的源代碼太雜亂,放出來怕丟人。10.1放假窩在家里寫了點心得,與大家分享一下。看過之后,你也可以寫。不當之處請指正。

 制作投票器,最關鍵的二樣東西是獲得投票信息和找到響應頁。也就是說通過請求頁訪問(提交)響應頁時,提交了什么信息,并且這個響應頁是什么。找到了這兩樣,投票器完成了一大半。
二、編寫投票器所需要的一些HTTP知識
1、 最好是寫過一些網頁。看某網頁的源文件,可以很快找到哪些是form表單、BUTTON提交按鈕、INPUT文件框等內容。
惡補網站:
http://www.lib.tsinghua.edu.cn/chinese/INTERNET/HTML/Normal/html_design.html
http://www.w3.org/TR/REC-html40/index/elements.html
http://www.w3.org/TR/REC-html32.html

2、了解一個HTTP的消息頭由哪些內容組成。如下是一個表單提交后,向網站發送的消息頭內容:

POST /redsky/temp/whu_tp/vote.asp HTTP/1.1 //定義HTTP是一個POST動作
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://pmc.whu.edu.cn/redsky/temp/whu_tp/whu_tp.asp //請求頁的網址
Accept-Language: zh-cn //指定的字符集類型
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FunWebProducts; mxie; .NET CLR 1.1.4322)
Host: pmc.whu.edu.cn
Content-Length: 46 //提交數據的長度
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ASPSESSIONIDQSCDRSCC=NHNDPPNDPJJFBBJMLBAOMHOD //提交時所傳送的Cookie值。

voted=25&voted=30&voted=35&Submit=%CD%B6%C6%B1 //提交時,所傳送的數據

惡補網站:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14

小結: WIN form 、WEB FORM兩樣都得精通,這是師傅2002年說的。


三、輔助軟件
查看HTTP消息頭的軟件,專門的軟件有HTTP Watch(
http://www.hanzify.org/index.php?Go=Show::List&ID=4384)或IEWatch,
也可以用 CommView (這些天www.ttdown.com上的軟件沒法下載:-()之類抓包的軟件。


四、手工分析投票過程
先說說手工操作時一個正常的投票過程(以武漢大學的這個投票為例)
http://pmc.whu.edu.cn/redsky/temp/whu_tp/whu_tp.asp
選擇被投票人石云霞(在姓名前面打勾),然后點“投票”,響應頁接收被投票人的姓名并記錄投票數記錄投票人的IP,然后返回投票成功或重復投票的信息。
這一過程很簡單,但我們不知道點投票后,瀏覽器向網頁發送了什么信息。在這里,先別急著用軟件來看,嘗試手工分析,這有助于一些復雜情況的解決。
回到投票的網頁,查看源文件(前面所提到的http基本知識派上用場了),
a)首先找響應頁是什么,也就是接收處理投票信息的網頁。在記事本中按Ctrl+f,查找’<form’字符串。通過搜索,找到這么一行:
<form name="form1" method="post" action="vote.asp">
Form表單的名稱name=form1,方法method=post,動作action=vote.asp 。vote.asp是我們所關心的,這個就是響應頁的地址。
整理地址得到:http://pmc.whu.edu.cn/redsky/temp/whu_tp/vote.asp
b)查找被投票人的信息。被投票人的選擇是通過一個多選框來完成,那么在源文件里查找’<input’字樣。通過搜索,找到了以下內容。
<input type="checkbox" name="voted" value="25">
<a href="whu_tp_more.asp?id=25" class="index" target="_blank">
石云霞</a> <b><font color="#FFFF00" size="2">  </font></b>

<input type="checkbox" name="voted" value="26">
<a href="whu_tp_more.asp?id=26" class="index" target="_blank">
李義天</a> <b><font color="#FFFF00" size="2">  </font></b>
………………………….
從這一大串內容中可以看出,石云霞的編號為25,李義天的編號為26 ,input元素的名稱為voted。 整理一下voted=25這是被投票人的信息。
查找input的時候需要注意,看是否有hidden類型的input元素。隱藏一定數量的input元素,可以起到一定的防范作用。
在源文件里一直看下去,只到</form>為止。在</form>前還有兩個按鈕,
<input type="submit" name="Submit" value="投票">
<input type="reset" name="Submit2" value="重置">
組合一下 submit=投票 submit2=重置(這個內容可以忽略)。
c) 最后整理一下,得到一個完整的網址
http://pmc.whu.edu.cn/redsky/temp/whu_tp/vote.asp?voted=25& submit=投票
在瀏覽器中訪問一下這個地址,看有什么提示??,提示“投票成功“。再次訪問提示“你的IP已經投過一次了^_^”。這說明這個網址就是真正的投票網址。只要不斷地訪問這個網址,就可以達到投票的目的。

小結:沒寫過網頁也沒關系,通過輔助軟件也可以分析出這一網址。


五、軟件分析投票過程
安裝HTTPWATCH后,重啟機器,可以在IE標準按鈕欄中找到它的圖標(沒有的話,從菜單‘查看’->‘瀏覽器欄’中選擇),單點圖標后如圖,IE窗口下半部分顯示出HTTPWATCH的工作窗口。
http://bbs.et8.net/bbs/attachment.php?attachmentid=339392&stc=1
圖中顯示的內容是選擇點擊‘投票’按鈕后,IE與網站之間的數據流。上半部分記錄了IE訪問了哪幾個網頁,下半部分是訪問某個網頁時,具體的數據流。
(HTTPWATCH的使用方法在這里不細講了。)
我們在正常瀏覽網頁時,IE一般的動作都是GET。而投票過程中,IE需要將你的選擇(被投票人的姓名)提交給投票的網址,訪問這個網址時,IE將產生一個POST動作。查看HTTPWATCH的記錄,URL=http: //pmc.whu.edu.cn/redsky/temp/whu_tp/vote.asp時,IE的動作是POST。那么http: //pmc.whu.edu.cn/redsky/temp/whu_tp/vote.asp就是投票的響應頁。這和前面手工分析時找到的響應頁是一致的。
找到了響應頁,接下來找投票的信息,也就是IE提交了什么數據。這里看HTTPWATCH窗口的下半部分。
下半部分是一個TAB PANEL,看重要的幾個標簽。
HEADERS:提交到響應頁的HTTP HEADER的內容。
Cookies:提交時,Cookies的內容。
POST DATA:提交時,IE向響應頁發送的數據。
STREAM:提交時,本地機器與網站之間的傳輸的數據流。
http://bbs.et8.net/bbs/attachment.php?attachmentid=339393&stc=1
顯而易見,POST DATA是我們要找的內容。看到這個標簽,左邊是兩個參數名voted 和submit ,右邊是兩個參數的值,‘25’和‘投票’。整理一下得到:
Voted=25 submit=投票
將這兩個參數值與前面找到的網址整理一下,得到
http://pmc.whu.edu.cn/redsky/temp/whu_tp/vote.asp?voted=25& submit=投票

六、編寫投票器
找到了真正的投票URL,用C#做投票器就簡單了,無非是做到:如何循環地訪問這個網頁。
看下面的這個過程。

………
using System.Net;
………

public int GotoURL( out string message,string url,int timeout,string proxyurl,string keyword,out int rate,bool proxyed)
/*
Message:返回的信息
Url:需要訪問的地址
Timeout:超時時間
Proxyurl:代理的地址
Keyword:判斷投票成功的標志
Rate:訪問url所花費的時間
Proxyed:是否使用代理
*/
{
byte[] gbyte=new byte[1024];
string strInput;
int iret=3;
int i,len=0;
DateTime dtBegin=DateTime.Now;
message="正在訪問中。。。";
try
{

url=@"http://pmc.whu.edu.cn/redsky/temp/whu_tp/vote.asp?voted=25& submit=投票";
WebRequest myWebRequest=WebRequest.Create(url);
myWebRequest.Timeout=timeout;//設置超時時間=15000毫秒

if (proxyed)//是否使用代理功能
{

WebProxy myProxy=new WebProxy();//實例化一個WebProxy類,這個類設置WebRequest的Proxy屬性,這樣可以通過代理來訪問url。
myProxy=(WebProxy)myWebRequest.Proxy;
string proxyAddress= proxyurl;
Uri newUri=new Uri(proxyAddress);
myProxy.Address=newUri;
myWebRequest.Proxy=myProxy;
}
WebResponse myWebResponse=myWebRequest.GetResponse();//實例化一個WebResponse類,用于接收WebRequest的響應內容,依據內容來判斷投票是否成功。
Stream streamResponse=myWebResponse.GetResponseStream();// 實例化一個Stream類,從WebResponse接收數據流。

i=streamResponse.Read(gbyte,len,1024);
len+=i;
while(i!=0)
{
i=streamResponse.Read(gbyte,len,1024);
len+=i;
}

strInput=System.Text.Encoding.GetEncoding("gb2312").GetString(gbyte);
i=strInput.IndexOf("成功");
Console.WriteLine(i);
if (i==-1)
message="訪問成功";
else
message="訪問失敗";// 將數據流轉換成字符串,并從中判斷投票是否成功。
iret=0;
streamResponse.Close();
}

catch (System.Net.WebException we)
{
message="NetError"+we.Message;
}
catch (System.IO.IOException ie)
{
message="IOError"+ie.Message;
}
catch (System.Exception ex)
{

message=ex.Message;


}

TimeSpan ts=DateTime.Now-dtBegin;
rate=(int)ts.TotalMilliseconds; //獲取訪問的時間。
return iret;
}

過程很簡單,就是使用System.Net中的兩個類來訪問網頁。
創建實例:WebRequest myWebRequest=WebRequest.Create(url);
訪問網頁:WebResponse myWebResponse=myWebRequest.GetResponse();
流StreamResponse視響應頁的處理方法,可能沒有任何返回內容。
Stream streamResponse=myWebResponse.GetResponseStream();

考慮到一個IP只能投票一次的限制,過程加了使用代理的功能
WebProxy myProxy=new WebProxy();
這樣即可以當投票器來使用,也可以用于檢測代理的有效性。

接下來的事,就容易多了。找代理,循環調用這個過程。循環速度感覺慢的話,可以用多個線程一起來跑。


小結:直接訪問響應頁就能投票,這是最常見的投票方式。網頁設計人員沒有在響應頁做防范處理,從而為投票器創造了的條件。
防范措施通常有以下幾種:
1、 對HTTP HREADERS里的REFERER做判斷,為空表示沒有訪問過投票頁(提交頁)。這樣繞開請求頁,直接訪問響應頁是無效的。
2、 訪問投票頁時,在headers里的cookies里設置某種標志,提交時,響應頁對這個標志做判斷。沒有這個標志,直接訪問響應頁是無效的。
3、 訪問投票頁時,隨機生成N位數字驗證碼,響應頁對驗證碼做判斷。
4、 生成圖形驗證碼。響應頁對驗證碼做判斷。
第1、2種方法容易處理,研究出規律,設置WebRequest的headers屬性。
第3種方法需要多加個過程,首先訪問投票頁得到驗證碼,然后與其他data組合一同post給響應頁。
第4種無解,和和。不過,還沒發現哪種投票會用上圖形驗證碼這措施。手工投票不僅麻煩,同時也關閉了自己、他人的方便之門。


結言:
不管投票方式如何,投票所需填寫的內容有多復雜,最終它還是要提交給響應頁做處理。多看看http watch。
不會編程也沒關系,找代理軟件,利用代理檢測的功能,投票。

來源:http://blog.csdn.net/gavin_luo/article/details/5162388

轉載于:https://www.cnblogs.com/gjhjoy/p/3492020.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377395.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377395.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377395.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【設計模式之美】<Reading Notes>貧血模型與充血模型

小知識 需要了解的一些名詞 1、領域驅動設計&#xff08;Domain Driven Design&#xff0c;簡稱 DDD&#xff09; 2、MVC 三層架構 &#xff1a; M 表示 Model&#xff0c;V 表示 View&#xff0c;C 表示 Controller。 它將整個項目分為三層&#xff1a;展示層、邏輯層、數據層…

TAFE的完整形式是什么?

TAFE&#xff1a;拖拉機和農用設備 (TAFE: Tractors and Farm Equipment) TAFE is an abbreviation of Tractors and Farm Equipment Limited. It is an Indian tractor manufacturer which is founded at Chennai in 1960. It is the second-largest tractor manufacturer in …

Oracle 10g 數據庫的備份和還原

一、備份數據庫1.在圖形工具中&#xff0c;如sqldeveloper,pl/sqldeveloper用以下這句查找空表select alter table ||table_name|| allocate extent; from user_tables where num_rows0;2.把第一步執行得到的結果當用sql語來再次執行3.到oracle服務器上執行備份語句. 運行-cmd …

用戶行為分析指導電商精細化運營

規模和利潤&#xff0c;這兩個在商業運營中最基本的指標&#xff0c;卻在電子商務市場中遭遇了不同的待遇。前兩年&#xff0c;幾乎所有的電商企業都只追求規模&#xff0c;不追求利潤&#xff0c;導 致自身的運營極其粗放&#xff0c;絕大多數電商公司只有兩招&#xff1a;猛打…

【C++基礎】 類模板

類模板 模板是將類中某些類型變為泛型&#xff0c;從而定義一個模板。 如下&#xff1a; 類模板的語法 直接進行對比&#xff1a; 泛型化之前 泛型化之后類模板的實例化 注意&#xff1a;只要是對類模版進行實例化&#xff0c;編譯器就會生成一個類&#xff01;&#xff0…

ruby 怎么拋異常_Ruby中的異常處理

ruby 怎么拋異常Ruby異常處理 (Ruby Exception Handling) Exceptions are abnormal conditions arising in the code segment at runtime in the form of objects. There are certain predefined Exception classes whereas we can create our exception known as Custom excep…

cocos2d-x游戲開發系列教程-中國象棋02-main函數和歡迎頁面

之前兩個博客講述了象棋的規格和工程文件之后&#xff0c;我們繼續深入的從代碼開始學習cocos2dx首先從程序入口main函數開始main函數int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow) {UNREFERENCED_PARAMETER(h…

[原創]Android中的android:layout_width和android:width的區別

在android系統中&#xff0c;我們可以通過在xml資源文件中定義布局&#xff0c;一般的寫法是&#xff1a; <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"ma…

【C++基礎】模板參數與模板繼承

模板參數 默認類型參數 函數參數可以設定一個默認值&#xff0c;我們現在可以對類模板的類型參數設定一個默認類型。 指定泛型Stack的默認類型參數為 int template<typename T int> class Stack{... };當我們這樣定義一個對象時&#xff1a; Stack<> stack;使…

UNIX標準化及實現之POSIX標準可選頭文件

POSIX標準定義的可選頭文件 頭文件說明<aio.h>異步I/O<mqueue.h>消息隊列<pthread.h>線程<sched.h>執行調度<semaphore.h>信號量<spawn.h>實時spawn接口<stropts.h>XSI STREAMS接口<trace.h>事件跟蹤轉載于:https://www.cnblo…

Julia中的denominator()函數

Julia| 分母()函數 (Julia | denominator() function) denominator() function is a library function in Julia programming language, it is used to get the denominator of the rational representation of the given value. denominator()函數是Julia編程語言中的庫函數&a…

【C++基礎】STL迭代器

已知&#xff1a; STL組成部分&#xff1a; 容器、迭代器、算法、函數對象、空間分配器 容器&#xff1a;用于保存一組數據&#xff0c;數據個體被稱為元素 迭代器&#xff1a;用于遍歷容器中的元素&#xff0c;容器都有自己專屬的迭代器&#xff0c;只有容器才知道如何遍歷自己…

用ie9瀏覽器若出現看視頻有聲音沒圖像的問題處理

當我們在用ie9瀏覽器上網想看視頻時&#xff0c;有時會遇到各種問題&#xff0c;尤其是有關聲音和圖像的。有時候有聲音沒圖像&#xff0c;但有時候有圖像卻沒聲音。各種問題。當遇到某些問題時&#xff0c;只要是關于網頁視頻的&#xff0c;一般都會選擇更新網頁視頻播放插件&…

java架構師之路:JAVA程序員必看的15本書的電子版下載地址

java架構師之路&#xff1a;JAVA程序員必看的15本書的電子版下載地址 作為Java程序員來說&#xff0c;最痛苦的事情莫過于可以選擇的范圍太廣&#xff0c;可以讀的書太多&#xff0c;往往容易無所適從。我想就我自己讀過的技術書籍中挑選出來一些&#xff0c;按照學習的先后順序…

office數據集dslr_DSLR的完整形式是什么?

office數據集dslrDSLR&#xff1a;數碼單鏡反光 (DSLR: Digital Single-Lens Reflex) DSLR is an abbreviation of digital single-lens reflex. It alludes to a digital camera which with the sensor of digital imaging merges optics and mechanism of single-lens reflex…

envs\TensorFlow2.0\lib\site-packages\tensorflow\python\framework\dtypes.py:516: FutureWarning 解決方案

import tensorflow后的完整報錯&#xff1a; D:\Anaconda3\envs\TensorFlow2.0\lib\site-packages\tensorflow\python\framework\dtypes.py:516: FutureWarning: Passing (type, 1) or ‘1type’ as a synonym of type is deprecated; in a future version of numpy, it will b…

轉義序列

轉義序列描述\n換行符\r回車\t水平制表符\\反斜杠\$美元符\"雙引號\[0-7]{1.3}八進制記法\x[0-9A-Fa-f]{1,2}十六進制記法轉載于:https://www.cnblogs.com/cindylu520/archive/2012/07/05/2577246.html

Java動態代理模擬spring的AOP

廣州瘋狂軟件學院擁有三大課程體系包括&#xff1a;java課程&#xff0c;android課程&#xff0c;ios課程&#xff0c;瘋狂軟件年終鉅惠&#xff0c;報名java就業班&#xff0c;免費贈送基礎班&#xff0c;名額有限&#xff0c;本月火熱報名中&#xff0c;歡迎有志之士電話或者…

xlrd.biffh.XLRDError: Excel xlsx file; not supported解決方法

將原本的xlrd卸載&#xff0c;安裝舊版本&#xff1a; pip uninstall xlrd pip install xlrd1.2.0轉自&#xff1a;https://www.cnblogs.com/xiaoqiangink/p/14144517.html

生產消費是什么設計模式_快速消費品的完整形式是什么?

生產消費是什么設計模式快消品&#xff1a;快速消費品 (FMCG: Fast-Moving Consumer Goods) FMCG is an abbreviation of Fast-Moving Consumer Goods which are also known as Consumer Packed Goods (CPG). These consumer packed goods allude to the products that are sol…