抓包技術-速成

很多人不怎麼知道抓包,又非常想學,更煩惱的是,關於抓包技術的實現文章少之又少,於是我萌動了寫一篇關於抓包的實現的步驟的博客。希望對你們有所幫助,同時也希望尊重原創,歡迎轉載。


一、首先你要知道什麼是抓包

抓包就是將網絡傳輸發送與接收的數據包進行截獲、重發、編輯、轉存等操作,也用來檢查網絡安全,但往往被某些無恥之徒用來網遊作弊。

這是我大三上學期通過抓包做的小型教務系統--La吧(喇叭),可以查成績,查所有班級的課表,公告欄,機構通知,圖書館查詢書籍,查詢借書情況、意見反饋等等的功能。後臺數據通過Bmob移動後端雲服務進行數據存儲。

下面就讓我通過我做的小項目進行闡述如何抓包吧。

二、你所需要的工具

抓取數據的分析工具有很多,不同瀏覽器也自帶很多開發人員工具,如果你的是IE內核的瀏覽器的話,比如360安全瀏覽器,你可以安裝一個HttpWatch,相對web開發的人員來說對這個工具很熟悉,HttpWatch是一款強大的網頁數據分析工具。集成在Internet Explorer工具欄。包括網頁摘要。Cookies管理。緩存管理。消息頭髮送/接受。字符查詢。

如果你的是Firefox火狐瀏覽器的話,恭喜你,它裏面自帶了一個比較好用的工具firebug,它的功能是和HttpWatch差不多,區別不大,我就是用Firefox自帶的工具進行抓包分析的。

下面就讓我用圖片展示firebug的安裝吧:

151119_YK3t_1780187.png

 

151119_5Ztt_1780187.png

 

151119_Fehe_1780187.png

 

 三、你最關心的代碼實現。

我做的作品是通過抓取我校(廣東石油化工學院)的教務系統的數據進行分析和操作的,看到圖片上的我畫的,誒,是不是真是你想做和抓取的呀?

153414_52TE_1780187.png

 

好了,現在要用的firebug終於到場了,我們點擊瀏覽器小蟲子的圖標,或者直接按下F12快捷鍵,便出現這個頁面,這個頁面正是我們所需要的抓包分析頁面。

154414_UPJ7_1780187.png

有木有很激動,看到數據了沒有?這些數據正是我們所需要的抓取的數據。

但是問題來了。我是先登錄才能到這個頁面的啊。

其實我們登陸時是通過cookie進行驗證的,如果返回的cookie不爲null,那麼則是登陸成功

155759_YuC3_1780187.png

那麼問題來了。我要怎麼才能到到cookie了。cookie其實就相當於我們的身份證一樣,裏面有唯一的信息。不多說,直接上代碼:

  
 /**
  * 登錄時得到cookie
  * @param xueHao 學號,即是登陸賬號
  * @param password 登陸密碼
  * @return
  */ public List<Cookie> getCookie(String xueHao,String password) {
   List<Cookie> cookies = null; // 保存獲取的cookie  try {
   HttpClient client = new DefaultHttpClient();
  //學校的教務系統,改爲你的學校教務系統   String uriAPI = "http://218.15.22.136:3008/";
   HttpPost httpPost = new HttpPost(uriAPI);
   List<NameValuePair> params = new ArrayList<NameValuePair>();
   params.add(new BasicNameValuePair(
     "Window1$SimpleForm1$rdl_shenFen", "學生"));
   params.add(new BasicNameValuePair("Window1$SimpleForm1$tbx_XueHao",
     xueHao));
   params.add(new BasicNameValuePair("Window1$SimpleForm1$tbx_pwd",
     password));
   params.add(new BasicNameValuePair("Window1_Collapsed", "false"));
   params.add(new BasicNameValuePair("Window1_Hidden", "false"));
   params.add(new BasicNameValuePair("Window1_SimpleForm1_Collapsed",
     "false"));
   params.add(new BasicNameValuePair("X_AJAX", "true"));
   params.add(new BasicNameValuePair("X_CHANGED", "true"));
   params.add(new BasicNameValuePair("X_STATE", "e30="));
   params.add(new BasicNameValuePair("X_TARGET",
     "Window1_Toolbar1_btn_login"));
   params.add(new BasicNameValuePair("__EVENTARGUMENT", ""));
   params.add(new BasicNameValuePair("__EVENTTARGET",
     "Window1$Toolbar1$btn_login"));
   // 發出HTTP request   httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
   // 取得HTTP response   HttpResponse httpResponse = client.execute(httpPost); // 執行   // 若狀態碼爲200 ok   if (httpResponse.getStatusLine().getStatusCode() == 200) { // 返回值正常    // 獲取返回的cookie    cookies = ((AbstractHttpClient) client).getCookieStore()
      .getCookies();
    //System.out.println("cookies=" + cookies);    if (cookies.isEmpty())
     System.out.println("cookies empty");
   } else {
   }
  } catch (Exception e) {
   System.out.println("getCookie error:" + e);
  }
  return cookies;
 }

你會問params.add(new BasicNameValuePair("X_AJAX", "true")) 這些東西是什麼啊?別急!再看圖 
160440_HUFV_1780187.png

 怎麼樣?懂了吧?其實就是post傳帶的參數。

ok,進入系統之後,我們就要對自己感興趣的數據進行抓取了,繼續如圖:

190442_R2Bb_1780187.png

選擇自己想要抓取的頁面,點擊cookies可以知道,我自己已經登陸,cookie不爲空。點擊響應可以看到190212_AN57_1780187.png

 

自己想要抓取的數據已經存在,不難發現自己想要數據部分是以json的形式顯示出來的,現在就是得到這些數據進行分解抓取了。你會說,這個什麼東西,我看不懂,看不懂沒關係,你只要數據就行了,對於這響應的數據,其實是asp的格式而已,如果點擊的網頁時htmll的話,那麼響應的便是html,同樣是可以進行解析的。

那怎麼得到這個頁面呢,先看代碼,再解釋吧:

  /**
  * 得到成績數據
  */ public ArrayList<HashMap<String, Object>> getMyGrade(List<Cookie> cookies) {
  String result = null;
  ArrayList<HashMap<String, Object>> list = null;
  String uriPath = "http://218.15.22.136:3008/ChengJiChaXun.aspx";
  try {
   HttpPost httpPost = new HttpPost(uriPath);
   httpPost.setHeader("Cookie", "ASP.NET_SessionId="     + cookies.get(0).getValue() + ";XingMing="     + cookies.get(1).getValue());
   HttpResponse httpResponse = new DefaultHttpClient()
     .execute(httpPost);
   if (httpResponse.getStatusLine().getStatusCode() == 200) {
    result = EntityUtils.toString(httpResponse.getEntity());
    if (result != null && !result.isEmpty()) {
     list = new ArrayList<HashMap<String, Object>>();
     list = toGradeData(result);
    }
   }
  } catch (ClientProtocolException e) {
   // TODO Auto-generated catch block   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block   e.printStackTrace();
  }
  return list;
 }

首先呢,你的得到你想要抓取的頁面的地址,如http://218.15.22.136:3008/ChengJiChaXun.aspx,但是這僅僅是不夠的,因爲你要告訴系統的你的身份,不然誰都可以查分數了。沒錯,你要把cookie的內容傳到系統中, httpPost.setHeader("Cookie", "ASP.NET_SessionId="  + cookies.get(0).getValue() + ";XingMing=" + cookies.get(1).getValue());讓系統知道你是否有權限查詢數據。不多說,看下圖:

192234_FqT5_1780187.png

當然代碼中的  list = toGradeData(result)你可能看不懂,這是我自己寫的獲取我需要的數據的方法,最後把數據裝進ArrayList<HashMap<String,Object>>中返回,那麼接下來,你應該知道怎麼做了吧?和listview綁定,就可以把數據顯示在手機界面了。如圖:

193327_1zc8_1780187.jpg

 

至於對源碼的解析,可以同jsoup解析網頁來進行抓取數據

當然,我的項目做了消息通知,公告欄,機構通知,如圖:

194208_ZG7q_1780187.jpg

 那麼我是怎麼做的呢?

在這裏。我就得向大家介紹一個很好用的移動雲服務器了。Bmob移動後端雲服務,它是一個非常好用的免費的雲數據庫,我們做的項目如果不能聯網獲取數據那麼這樣的應用是沒人用的,或者說是失敗的,但是聯網得到數據我們得有服務器啊,一般個人開發者是沒有自己的服務器,特別是學生來說更是如此,但是,現在你不用擔憂了,Bmob可以幫你搞定所有的繁瑣的後臺開發,而讓你更有時間和精力去開發你的應用。

具體我不多說,免得以爲我在打廣告,如果自己感興趣的話,可以到Bmob官網瞭解。

首先來看,上圖的數據我並不是存在SQLite的,也不是存在文件中的,我是直接通過聯網從我的雲服務中得到的,一旦我的雲服務器中的數據有改變,我下拉就可以得到最新消息。便可以做到類似新聞一樣的消息通知了。

大家請看我後臺的雲端數據庫

 195945_DMTt_1780187.png

 200200_ybCk_1780187.png

怎麼樣?不錯吧?其實你看Bmob的文檔,你會發現,其實這些都不難,代碼說真的挺簡單的。裏面可以設置自己應用的的官網之類的一堆功能,建議都去看看吧,相信你們能做的更好更厲害。這個就是我在Bmob中下載我的應用的官網http://downloadlaba.bmob.cn

最後呢,希望我寫的這些對你們有幫助吧,尊重原創,轉發請寫上原創地址。謝謝啦~如有疑問歡迎[email protected]


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章