抓包技術

1、首先你要知道什麼是抓包
抓包就是將網絡傳輸發送與接收的數據包進行截獲、重發、編輯、轉存等操做,也用來檢查網絡安全,但每每被某些無恥之徒用來網遊做弊。
這是我大三上學期經過抓包作的小型教務系統--La吧(喇叭),能夠查成績,查全部班級的課表,公告欄,機構通知,圖書館查詢書籍,查詢借書狀況、意見反饋等等的功能。後臺數據經過Bmob移動後端雲服務進行數據存儲。
下面就讓我經過我作的小項目進行闡述如何抓包吧。html

2、你所須要的工具
抓取數據的分析工具備不少,不一樣瀏覽器也自帶不少開發人員工具,若是你的是IE內核的瀏覽器的話,好比360安全瀏覽器,你能夠安裝一個HttpWatch,相對web開發的人員來講對這個工具很熟悉,HttpWatch是一款強大的網頁數據分析工具。集成在Internet Explorer工具欄。包括網頁摘要。Cookies管理。緩存管理。消息頭髮送/接受。字符查詢。
若是你的是Firefox火狐瀏覽器的話,恭喜你,它裏面自帶了一個比較好用的工具firebug,它的功能是和HttpWatch差很少,區別不大,我就是用Firefox自帶的工具進行抓包分析的。
下面就讓我用圖片展現firebug的安裝吧:
圖片描述web

圖片描述

圖片描述

3、你最關心的代碼實現。
我作的做品是經過抓取我校(廣東石油化工學院)的教務系統的數據進行分析和操做的,看到圖片上的我畫的,誒,是否是真是你想作和抓取的呀?數據庫

圖片描述

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

圖片描述

有木有很激動,看到數據了沒有?這些數據正是咱們所須要的抓取的數據。
可是問題來了。我是先登陸才能到這個頁面的啊。
其實咱們登錄時是經過cookie進行驗證的,若是返回的cookie不爲null,那麼則是登錄成功後端

圖片描述

那麼問題來了。我要怎麼才能到到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")) 這些東西是什麼啊?別急!再看圖緩存

圖片描述

怎麼樣?懂了吧?其實就是post傳帶的參數。
ok,進入系統以後,咱們就要對本身感興趣的數據進行抓取了,繼續如圖:安全

圖片描述

選擇本身想要抓取的頁面,點擊cookies能夠知道,我本身已經登錄,cookie不爲空。點擊響應能夠看到服務器

圖片描述

本身想要抓取的數據已經存在,不難發現本身想要數據部分是以json的形式顯示出來的,如今就是獲得這些數據進行分解抓取了。你會說,這個什麼東西,我看不懂,看不懂不要緊,你只要數據就好了,對於這響應的數據,實際上是asp的格式而已,若是點擊的網頁時htmll的話,那麼響應的即是html,一樣是能夠進行解析的。cookie

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

/**
  * 獲得成績數據
  */
 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());讓系統知道你是否有權限查詢數據。很少說,看下圖:

圖片描述

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

圖片描述

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

固然,個人項目作了消息通知,公告欄,機構通知,如圖:

圖片描述

那麼我是怎麼作的呢?

在這裏。我就得向你們介紹一個很好用的移動雲服務器了。Bmob移動後端雲服務,它是一個很是好用的免費的雲數據庫,咱們作的項目若是不能聯網獲取數據那麼這樣的應用是沒人用的,或者說是失敗的,可是聯網獲得數據咱們得有服務器啊,通常我的開發者是沒有本身的服務器,特別是學生來講更是如此,可是,如今你不用擔心了,Bmob能夠幫你搞定全部的繁瑣的後臺開發,而讓你更有時間和精力去開發你的應用。

具體我很少說,省得覺得我在打廣告,若是本身感興趣的話,能夠到Bmob官網瞭解。

首先來看,上圖的數據我並非存在SQLite的,也不是存在文件中的,我是直接經過聯網從個人雲服務中獲得的,一旦個人雲服務器中的數據有改變,我下拉就能夠獲得最新消息。即可以作到相似新聞同樣的消息通知了。

你們請看我後臺的雲端數據庫

圖片描述

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

最後呢,但願我寫的這些對大家有幫助吧,尊重原創,轉發請寫上原創地址。謝謝啦~若有疑問歡迎245105136@qq.com

相關文章
相關標籤/搜索