編寫自動認可留言資訊程式

來源:互聯網
上載者:User

一般來說,製作自動認可留言資訊的程式,要分為以下步驟:
一、分析填寫留言頁面的HTML代碼,瞭解頁面結構,重點是尋找裡面的form標記,因為那是提交資料的地方;
二、用抓包工具抓取資料包(如WSockExpert),總結有哪些資料要提交;
三、理順思路,開工;
四、調試完成

如果要重複提交資料(什嗎?做連環炮?),最簡單的方法是使用迴圈,沒置一個條件可以在適當的時候結束迴圈就可以了,不要搞成死迴圈。當然,也可以使用定時器如Timer之類的組件,每隔一段時間提交一次。

在沒有設定驗證碼的頁面比較好處理,如果設定了驗證碼,可以嘗試去識別,如果識別不了,也只能手動輸入了。

為了確保能夠每次順利提交,最好每次的內容不太相同,如Email地址、名稱等,有些頁面做了限制的。

一、分析頁面結構
開啟指定頁面,右擊查看源檔案,按Ctrl + F尋找關鍵字“form”,找到FORM標記,形如
<form name="form1" action="sendmail.php" enctype="multipart/form-data" method="post" onSubmit="return funCheckContactUs(this,'8','')" style="margin:0px">
在這行代碼中我們至少知道兩個資訊,1、提交的頁面;2、提交方式為POST。

二、抓包分析
我覺得抓包工具比較好用的是WSockExpert,但使用的時候要把殺毒軟體關掉,好像殺毒軟體都不太喜歡它,老進行查殺。
用IE把開頁面,填好留言內容,注意,不要點擊提交。

把開WSockExpert,進程選擇IE,盡量使用IE來抓包,因為其它瀏覽器有時候抓不到資料。開始抓包後,再回到IE,點擊提交,再回到WSockExpert,就會看到所捕獲的資料了,找到帶有POST字樣的資料記錄。

POST /cn/sendmail.php HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/QVOD, application/QVOD, */*
Referer: http://www.xxxxxxx.com/xx/contact.php
Accept-Language: zh-cn
Content-Type: multipart/form-data; boundary=---------------------------7da1029390348
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)
Host: www.xxxxxxxxx.com
Content-Length: 961
Connection: Keep-Alive
Cache-Control: no-cache

-----------------------------7da1029390348
Content-Disposition: form-data; name="myname"

CheckCode
-----------------------------7da1029390348
Content-Disposition: form-data; name="mr"

Mr.
-----------------------------7da1029390348
Content-Disposition: form-data; name="company"

Microsoft
-----------------------------7da1029390348
Content-Disposition: form-data; name="phone"

88888888
-----------------------------7da1029390348
Content-Disposition: form-data; name="email"

abcd@efg.com
-----------------------------7da1029390348
Content-Disposition: form-data; name="about"

General Enquiries
-----------------------------7da1029390348
Content-Disposition: form-data; name="message"

ThisisContent
-----------------------------7da1029390348
Content-Disposition: form-data; name="x"

25
-----------------------------7da1029390348
Content-Disposition: form-data; name="y"

17
-----------------------------7da1029390348--

上部分是HTTP頭部,下部分才是內容,“-----------------------------7da1029390348”是隨機產生的分隔字元,用的時候直接連上,不用管它。
這裡有兩個欄位,X和Y,我也不知道用來幹嗎的,反正每次提交都有,不用管它,不影響資料提交。上面提到了有一個隨機產生的分隔字元,提交的欄位內容就是用這個分隔字元來劃分開來了,包括最後一個斷行符號符也不能掉。

還有一個問題是,如何確定成功提交?從返回的資料看,頁面有一個JS指令碼,彈出一個對話方塊,上面有提示,也就是說,在程式中,我們只要找到返回的資料中有這句話的,就說明提交成功。

三、編寫代碼

using System;<br />using System.Collections.Generic;<br />using System.ComponentModel;<br />using System.Data;<br />using System.Drawing;<br />using System.Text;<br />using System.Windows.Forms;<br />using System.IO;<br />using System.Net;<br />using System.Threading;</p><p>namespace PostTest<br />{<br /> public partial class Form1 : Form<br /> {<br /> //變數<br /> string strName = string.Empty;//名字<br /> string strCompn = string.Empty;//公司名稱<br /> string strPhone = string.Empty;//電話<br /> string strEmail = string.Empty;//電郵地址<br /> string strContent = string.Empty;//內容<br /> int tCount;//次數<br /> HttpWebRequest rq = null;//向伺服器發出請求<br /> HttpWebResponse rp = null;//接收來自伺服器的回應<br /> Thread th = null;//線程</p><p> public Form1()<br /> {<br /> //為了能夠 多線程訪問,設定該屬性<br /> CheckForIllegalCrossThreadCalls = false;<br /> InitializeComponent();<br /> }</p><p> private void Form1_Load(object sender, EventArgs e)<br /> {<br /> //初始化狀態<br /> lblMssge.Text = "準備就緒。";<br /> }</p><p> /// <summary><br /> /// 在另一個線程上執行<br /> /// </summary><br /> private void Do()<br /> {<br /> int i = 0;//當前執行次數<br /> while (i < tCount)<br /> {<br /> strName = strName + i.ToString();<br /> strEmail =i.ToString() + strEmail;<br /> rq = (HttpWebRequest)WebRequest.Create(txtAddr.Text);<br /> rq.Accept = "image/*,application/*,*/*";<br /> rq.Method = "POST";<br /> rq.ContentType = @"multipart/form-data; boundary=---------------------------7daaa342201c4";<br /> rq.UserAgent = @"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)";<br /> rq.Referer = "http://www.xxxxxxx.com/xx/contact.php";<br /> string poststr = null;<br /> //分隔字元<br /> string s = "-----------------------------7daaa342201c4";<br /> StringBuilder strb = new StringBuilder();<br /> /*名字*/<br /> strb.Append(s + "/r/n");<br /> strb.Append("Content-Disposition: form-data; name=/"myname/"" + "/r/n");<br /> strb.Append(Environment.NewLine);//空白行<br /> strb.Append(strName + "/r/n");<br /> /*先生*/<br /> strb.Append(s + "/r/n");<br /> strb.Append("Content-Disposition: form-data; name=/"mr/"" + "/r/n");<br /> strb.Append(Environment.NewLine);//空白行<br /> strb.Append("Mr." + "/r/n");<br /> /*公司名稱*/<br /> strb.Append(s + "/r/n");<br /> strb.Append("Content-Disposition: form-data; name=/"company/"" + "/r/n");<br /> strb.Append(Environment.NewLine);//空白行<br /> strb.Append(strCompn + "/r/n");<br /> /*電話號碼*/<br /> strb.Append(s + "/r/n");<br /> strb.Append("Content-Disposition: form-data; name=/"phone/"" + "/r/n");<br /> strb.Append(Environment.NewLine);//空白行<br /> strb.Append(strPhone + "/r/n");<br /> /*電郵*/<br /> strb.Append(s + "/r/n");<br /> strb.Append("Content-Disposition: form-data; name=/"email/"" + "/r/n");<br /> strb.Append(Environment.NewLine);//空白行<br /> strb.Append(strEmail + "/r/n");<br /> //<br /> strb.Append(s + "/r/n");<br /> strb.Append("Content-Disposition: form-data; name=/"about/"" + "/r/n");<br /> strb.Append(Environment.NewLine);//空白行<br /> strb.Append("General Enquiries" + "/r/n");<br /> /*內容*/<br /> strb.Append(s + "/r/n");<br /> strb.Append("Content-Disposition: form-data; name=/"message/"" + "/r/n");<br /> strb.Append(Environment.NewLine);//空白行<br /> strb.Append(strContent + "/r/n");<br /> //這個我也不知道用來幹嗎?<br /> strb.Append(s + "/r/n");<br /> strb.Append("Content-Disposition: form-data; name=/"x/"" + "/r/n");<br /> strb.Append(Environment.NewLine);//空白行<br /> strb.Append("24" + "/r/n");<br /> //<br /> strb.Append(s + "/r/n");<br /> strb.Append("Content-Disposition: form-data; name=/"y/"" + "/r/n");<br /> strb.Append(Environment.NewLine);//空白行<br /> strb.Append("8" + "/r/n");<br /> //<br /> strb.Append(s);<br /> strb.Append("--/r/n");<br /> //strb.Append(Environment.NewLine);<br /> poststr = strb.ToString();<br /> //***********************************************<br /> try<br /> {<br /> byte[] data = Encoding.UTF8.GetBytes(poststr);</p><p> rq.ContentLength = data.Length;//位元組組長度<br /> rq.GetRequestStream().Write(data, 0, data.Length);<br /> //返回<br /> rp = (HttpWebResponse)rq.GetResponse();<br /> StreamReader sr = new StreamReader(rp.GetResponseStream());<br /> string res = sr.ReadToEnd();//讀取結果<br /> //關閉流<br /> sr.Close();<br /> rp.Close();<br /> System.Diagnostics.Debug.WriteLine(res);<br /> //只要判斷是否存在“Your email has been submitted. Thank you”,<br /> //就可以知道是否提交成功。<br /> if (res.Contains("Your email has been submitted. Thank you"))<br /> {<br /> txtResult.AppendText(DateTime.Now.ToString() + " 提交成功。/r/n");<br /> }<br /> i += 1;<br /> lblMssge.Text = "進行了 " + i.ToString() + " 次操作。";<br /> }<br /> catch<br /> {<br /> lblMssge.Text = "出錯啦 。";<br /> }<br /> }<br /> button1.Enabled = true;<br /> }</p><p> private void button1_Click(object sender, EventArgs e)<br /> {<br /> strName = txtName.Text;<br /> strCompn = txtComp.Text;<br /> strPhone = txtPhone.Text;<br /> strEmail = txtEmail.Text;<br /> strContent = txtContent.Text;<br /> tCount = int.Parse(txtTimes.Text);<br /> txtResult.Clear();//清空文字框<br /> //線程是否已運行<br /> if (th != null)<br /> {<br /> th = null;<br /> }<br /> th = new Thread(new ThreadStart(this.Do));<br /> th.Start();<br /> button1.Enabled = false;<br /> }</p><p> private void Form1_FormClosing(object sender, FormClosingEventArgs e)<br /> {<br /> //關閉前清理線程<br /> if (th != null)<br /> th = null;<br /> }<br /> }<br />}

四、調試
OK,完成了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.