日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

如何利用C#编写网页投票器程序 如何使用代理来投票 代理IP来投票

發(fā)布時(shí)間:2023/12/1 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何利用C#编写网页投票器程序 如何使用代理来投票 代理IP来投票 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

 制作投票器,最關(guān)鍵的二樣?xùn)|西是獲得投票信息和找到響應(yīng)頁。也就是說通過請求頁訪問(提交)響應(yīng)頁時(shí),提交了什么信息,并且這個(gè)響應(yīng)頁是什么。找到了這兩樣,投票器完成了一大半。
二、編寫投票器所需要的一些HTTP知識
1、 最好是寫過一些網(wǎng)頁??茨尘W(wǎng)頁的源文件,可以很快找到哪些是form表單、BUTTON提交按鈕、INPUT文件框等內(nèi)容。
惡補(bǔ)網(wǎng)站:
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、了解一個(gè)HTTP的消息頭由哪些內(nèi)容組成。如下是一個(gè)表單提交后,向網(wǎng)站發(fā)送的消息頭內(nèi)容:

POST /redsky/temp/whu_tp/vote.asp HTTP/1.1 //定義HTTP是一個(gè)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, */*
//響應(yīng)頁可以使用的媒體類型
Referer: http://pmc.whu.edu.cn/redsky/temp/whu_tp/whu_tp.asp //請求頁的網(wǎng)址
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 //提交數(shù)據(jù)的長度
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ASPSESSIONIDQSCDRSCC=NHNDPPNDPJJFBBJMLBAOMHOD //提交時(shí)所傳送的Cookie值。

voted=25&voted=30&voted=35&Submit=%CD%B6%C6%B1 //提交時(shí),所傳送的數(shù)據(jù)

惡補(bǔ)網(wǎng)站:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14

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


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


四、手工分析投票過程
先說說手工操作時(shí)一個(gè)正常的投票過程(以武漢大學(xué)的這個(gè)投票為例)
http://pmc.whu.edu.cn/redsky/temp/whu_tp/whu_tp.asp
選擇被投票人石云霞(在姓名前面打勾),然后點(diǎn)“投票”,響應(yīng)頁接收被投票人的姓名并記錄投票數(shù)記錄投票人的IP,然后返回投票成功或重復(fù)投票的信息。
這一過程很簡單,但我們不知道點(diǎn)投票后,瀏覽器向網(wǎng)頁發(fā)送了什么信息。在這里,先別急著用軟件來看,嘗試手工分析,這有助于一些復(fù)雜情況的解決。
回到投票的網(wǎng)頁,查看源文件(前面所提到的http基本知識派上用場了),
a)首先找響應(yīng)頁是什么,也就是接收處理投票信息的網(wǎng)頁。在記事本中按Ctrl+f,查找’<form’字符串。通過搜索,找到這么一行:
<form name="form1" method="post" action="vote.asp">
Form表單的名稱name=form1,方法method=post,動作action=vote.asp 。vote.asp是我們所關(guān)心的,這個(gè)就是響應(yīng)頁的地址。
整理地址得到:http://pmc.whu.edu.cn/redsky/temp/whu_tp/vote.asp
b)查找被投票人的信息。被投票人的選擇是通過一個(gè)多選框來完成,那么在源文件里查找’<input’字樣。通過搜索,找到了以下內(nèi)容。
<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>
………………………….
從這一大串內(nèi)容中可以看出,石云霞的編號為25,李義天的編號為26 ,input元素的名稱為voted。 整理一下voted=25這是被投票人的信息。
查找input的時(shí)候需要注意,看是否有hidden類型的input元素。隱藏一定數(shù)量的input元素,可以起到一定的防范作用。
在源文件里一直看下去,只到</form>為止。在</form>前還有兩個(gè)按鈕,
<input type="submit" name="Submit" value="投票">
<input type="reset" name="Submit2" value="重置">
組合一下 submit=投票 submit2=重置(這個(gè)內(nèi)容可以忽略)。
c) 最后整理一下,得到一個(gè)完整的網(wǎng)址
http://pmc.whu.edu.cn/redsky/temp/whu_tp/vote.asp?voted=25& submit=投票
在瀏覽器中訪問一下這個(gè)地址,看有什么提示??,提示“投票成功“。再次訪問提示“你的IP已經(jīng)投過一次了^_^”。這說明這個(gè)網(wǎng)址就是真正的投票網(wǎng)址。只要不斷地訪問這個(gè)網(wǎng)址,就可以達(dá)到投票的目的。

小結(jié):沒寫過網(wǎng)頁也沒關(guān)系,通過輔助軟件也可以分析出這一網(wǎng)址。


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

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

………
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:超時(shí)時(shí)間
Proxyurl:代理的地址
Keyword:判斷投票成功的標(biāo)志
Rate:訪問url所花費(fèi)的時(shí)間
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;//設(shè)置超時(shí)時(shí)間=15000毫秒

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

WebProxy myProxy=new WebProxy();//實(shí)例化一個(gè)WebProxy類,這個(gè)類設(shè)置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();//實(shí)例化一個(gè)WebResponse類,用于接收WebRequest的響應(yīng)內(nèi)容,依據(jù)內(nèi)容來判斷投票是否成功。
Stream streamResponse=myWebResponse.GetResponseStream();// 實(shí)例化一個(gè)Stream類,從WebResponse接收數(shù)據(jù)流。

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="訪問失敗";// 將數(shù)據(jù)流轉(zhuǎn)換成字符串,并從中判斷投票是否成功。
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; //獲取訪問的時(shí)間。
return iret;
}

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

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

接下來的事,就容易多了。找代理,循環(huán)調(diào)用這個(gè)過程。循環(huán)速度感覺慢的話,可以用多個(gè)線程一起來跑。


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


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

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

轉(zhuǎn)載于:https://www.cnblogs.com/gjhjoy/p/3492020.html

總結(jié)

以上是生活随笔為你收集整理的如何利用C#编写网页投票器程序 如何使用代理来投票 代理IP来投票的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。