抓包技术

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

相关文章
相关标签/搜索