乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      使用C#實現(xiàn)網(wǎng)站用戶登錄

       命運之輪 2010-05-05

      我們在寫灌水機器人、抓資源機器人和Web網(wǎng)游輔助工具的時候第一步要實現(xiàn)的就是用戶登錄。那么怎么用C#來模擬一個用戶的登錄拉?要實現(xiàn)用戶的登錄,那么首先就必須要了解一般網(wǎng)站中是怎么判斷用戶是否登錄的。

      HTTP協(xié)議是一個無連接的協(xié)議,也就是說這次對話的內(nèi)容和狀態(tài)與上次的無關(guān),為了實現(xiàn)和用戶的持久交互,網(wǎng)站與瀏覽器之前在剛建立會話時將在服務(wù)器內(nèi)存中建立一個Session,該Session標(biāo)識了該用戶(瀏覽器),每一個Session都有一個唯一的ID,第一次建立會話時服務(wù)器將生成的這個ID傳給瀏覽器,瀏覽器在接下來的瀏覽中每一個發(fā)向服務(wù)器的請求中都將包含該SessionID,從而標(biāo)識了自己的身份。

      服務(wù)器上是使用內(nèi)存來保存Session中的信息,那么瀏覽器又使用什么來保存服務(wù)器分配的這個SessionID了?對,是Cookie。在剛建立會話時瀏覽器向服務(wù)器的請求中將不包含SessionID在Cookie中,服務(wù)器就認(rèn)為是一個全新的會話,從而在服務(wù)器上分配一段內(nèi)存給該Session用,同時將該Session的ID在Http Header中使用Set-Cookie發(fā)送給瀏覽器。

      現(xiàn)在原理已經(jīng)搞清楚了,那么我們就來實現(xiàn)一個網(wǎng)站的登錄嘛,這里就以盛大縱橫天下的登錄為例。

      要寫這種面向協(xié)議的網(wǎng)絡(luò)程序,抓包工具是少不了的,我們首先是要使用抓包工具分析在普通瀏覽器中登錄時發(fā)送和接收的內(nèi)容才好進一步使用C#來模擬瀏覽器發(fā)包。抓包工具很多,看個人愛好吧,我主要用的是HTTP Analyzer,專門針對HTTP的,太強的抓包工具把什么協(xié)議的包都抓出來反而不利于我們分析。

      1.最好能清除IE的所有Cookie記錄,以免對抓包分析造成影響,然后開啟抓包程序。

      2.在IE中輸入http://zh.sdo.com/web1.0/home/fastlogin.asp 這個快速登錄地址,我們將看到已經(jīng)抓到了很多請求和響應(yīng)的包。

      3.輸入用戶名和密碼,點擊登錄,IE中正常登錄,停止抓包,我們要的所有信息都被抓取好了。如圖:

      image

      4.盛大的登錄機制還是屬于比較復(fù)雜的,中間涉及到好幾個服務(wù)器,經(jīng)過分析得知(這個就是一個比較漫長的過程了,具體網(wǎng)站具體分析,這個分析過程我就不寫了)縱橫天下的登錄機制為:

      1)IE請求https://cas.sdo.com:80/cas/login?service=http://zh.sdo.com/web1.0/home/index.asp頁面,該頁面給IE一個SessionID,比如Set-Cookie: ASP.NET_SessionId=avcbse55l5e03suqi4dx3555; path=/

      2)IE同時在該HTTP的正文中得到一個ticket,這個ticket將在登錄中有用,當(dāng)然其他網(wǎng)站肯定不是這樣做的,這里分析的是縱橫天下的。location.href    =    http://www.sdo.com/login2.asp?lt=sd-1420e593-d2cf-4c9c-b249-07fe27932a21-2008-05-06_01%3a25%3a41.484&service=http%3a%2f%2fzh.sdo.com%2fweb1.0%2fhome%2ffastlogin.asp%3ftest%3d1; 這里lt參數(shù)就是我說的ticket了。

      3)將獲得的lt、用戶名、密碼還有一些其他的無關(guān)緊要的參數(shù)都Post到https://cas.sdo.com:80/cas/Login.PostTarget.aspx?service=http://zh.sdo.com/web1.0/home/fastlogin_after.asp 中,具體抓到的Post的數(shù)據(jù)如:warn=false&_eventId=submit&idtype=0&gamearea=0&gametype=0&challenge=3623&lt=sd-1420e593-d2cf-4c9c-b249-07fe27932a21-2008-05-06_01%3A25%3A41.484&username=studyzy&password=1234&ekey=&challenge=3623,這里我們就只關(guān)心lt,username,password這三個參數(shù)。

      4)獲取一個只有登錄後才能訪問的頁面,測試是否登錄成功。

      5.好,整個登錄機制我們已經(jīng)分析完了,接下來就是考慮代碼的實現(xiàn)了。在面向HTTP協(xié)議上,C#中有WebRequest、WebResponse、HttpWebRequest和HttpWebResponse等類。我們主要就基于這些類進行操作,當(dāng)然完全基于Socket編程也可以,但是這里就沒有這個必要了。

      在不設(shè)置Cookie、PostData的情況下要獲得一個頁面的HTML的方法很簡單:

      public static string GetHtml(string URL)
              
      {
                  WebRequest wrt;
                  wrt 
      = WebRequest.Create(URL);
                  wrt.Credentials 
      = CredentialCache.DefaultCredentials;
                  WebResponse wrp;
                  wrp 
      = wrt.GetResponse();
                  
      return new StreamReader(wrp.GetResponseStream(), Encoding.Default).ReadToEnd();
              }
       

       

      當(dāng)需要獲得服務(wù)器返回的Cookie的話,可以通過wrp.Headers.Get("Set-Cookie")方法來獲取。

      如果需要將Cookie加入到請求另外還Post數(shù)據(jù)的話其實也很簡單,只需要將httpWebRequest對象中設(shè)置ContentLength 和Request的Stream就可以了。

      httpWebRequest.ContentLength = byteRequest.Length;
      Stream stream;
      stream 
      = httpWebRequest.GetRequestStream();
      stream.Write(byteRequest, 
      0, byteRequest.Length);
      stream.Close(); 

       

      代碼我就不都貼出了,我做了一個Demo在附件中,大家有興趣研究的可以看一下。 /Files/studyzy/LoginSdoDemo.rar

      代碼中實現(xiàn)了盛大賬號的登錄,其實縱橫天下的登錄還沒有完成,接下來還有選擇具體服務(wù)器,將ticket轉(zhuǎn)到具體服務(wù)器上再進行驗證,原理也是一樣的,我這里就不再累述了。

      成功登錄后,接下來我們只需要每次發(fā)送請求是跟上該Cookie,服務(wù)器就認(rèn)為是登錄的用戶在操作了,接下來就可以隨便灌水、Download資源了,具體要做什么就大家自己弄了,只需要在IE中操作一篇,抓包分析出來,用C#實現(xiàn)同樣的發(fā)包就OK!

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多