前言:

   抓取电脑的数据包比较简单,使用一些抓包软件即可实现,譬如Wireshark、Fiddle、Sniffer、Appsniff、IRIS等等,这些的使用并不多说,反正要掌握各自的过滤方法,只查看有用的数据包。其中Wireshark、Sniffer、IRIS这类可以抓取整个局域网内所有的数据包,主要工作在数据传输层,Fiddle这类专用抓包工具只抓取某一类协议,譬如HTTP协议,通常工作在应用层,Fiddle支持HTTP断点调试,可修改发送和接受前的数据包。

   但如果要抓手机的数据包就比较麻烦,目前我使用的方法就是通过Connectify建立wifi热点,然后再通过Wireshark抓包。


使用Connectify:

   安装Connectify需要一台有无线网卡的笔记本,安装成功后运行Connectify,并且开启无线连接。“Hotspot Name、Password”设置热点名称和密码,以供手机连接,密码长度至少8位。“Internet”分享一个链接,可以有线或者无线,现在我的电脑能使用“本地连接 2”和“无线网络连接 3”上网,随便选一个均可,而手机就是通过这个分享的连接发送数据包。“Advanced”里的是电脑无线网卡的信息,不用作修改。Start Hotspot后,我的电脑会开启一个无线连接4,手机是通过它接收数据包


Connectify+Wireshark捕获手机APP的数据包


   顺利开启后,就可以用手机连接了,Connectify的Clients标签页里会看见一些信息,譬如分配给手机的IP地址。

   另:Bzeek也可以实现类似效果,但据说需要注册帐号,并且不够稳定。


使用Wireshark:

   运行Wireshark后,选择要抓包的连接,然后开始捕获,再过滤一些包就可以了,譬如“(ip.src==192.168.1.102 or ip.dst==192.168.1.102) and http”。

   还有一些过滤规则如端口过滤tcp.port ==80、tcp.srcport == 80,http模式过滤http.request.method=="GET"。


Connectify+Wireshark捕获手机APP的数据包


   这里有一个疑问,我电脑明明是使用无线连接的,托盘也显示无线的图标,但抓包的时候发现,我的请求包和响应包不知为何都是通过“本地连接2”的。

   然后就能在数据包的详细窗口里查看相关信息,越在上面的就越是底层。

Frame:   物理层的数据帧概况

Ethernet II: 数据链路层以太网帧头部信息

Internet Protocol Version 4: 网络层IP包头部信息

Transmission Control Protocol:  传输层数据段头部信息

Hypertext Transfer Protocol:  应用层的信息

   简单来说,IP是网络层,TCP是传输层,HTTP是应用层。我们现在主要关注应用层的信息。


捕获“行讯通”的数据

   开始嗅探“本地连接2”的包,同时手机运行“行讯通”并查询信息,即可得到一个关键的包。


Connectify+Wireshark捕获手机APP的数据包


   可以看到请求地址是“http://info.gzyyjt.net:9009/unicom/Bus ”,服务器地址是“http://info.gzyyjt.net:9009 ”,看这域名应该是羊羊网下的一个网站,但他们IP不相同。但关键问题是最后那行Line-based text data,发现手机post过去的数据是已经加密了的,不能从中获取有用的信息。浏览器上直接打开刚刚提到的两个地址,都是一些加密的数据。看来只能做到这一步了,虽然有点可惜,但捕获手机应用的数据包还是成功的。


后记:

   这个方法实质就是把电脑当作路由器,然后再嗅探经过这个“路由器”的数据包而达到目的。如果是Win7系统的话,以下两行命令也可以创建人点。

netsh wlan set hostednetwork mode=allow ssid=APName key=password

netsh wlan start hostednetwork

   另:路由器的MAC地址可通过“arp -a”命令获得。