本文主要讨论一种很是方便的抓取Android和iphone手机网络数据包的办法,以及介绍wireshark最经常使用的技巧web
(1).网页抓包工具chrome
Chrome浏览器插件express
FireBug 插件 windows
HttpWatch浏览器
Fiddler服务器
在浏览器chrome和firefox中可使用插件抓取网络包,httpwatch会以插件的形式安装在IE和firefox浏览器中,对web请求进行抓包。而Fiddler则是一个独立的程序,其原理是在启动以后开启对127.0.0.1:8888的端口进行监听,并将计算机上的浏览器的代理设置为指向其监听的8888端口,这样当浏览器请求网页的时候,会经过fiddler监听的8888端口,这样fiddler会获取到全部请求的数据和web服务器回复的数据。Fiddler能够自动对IE和非IE浏览器的代理进行设置,打开fiddler以后,点击IE的“工具”— “Internet选项”—“链接”选项卡 – 点开“局域网设置” 在弹出的对话框中你会发现 “代理服务器”设置中的“为LAN使用代理服务器”这个复选框是勾选上的,点击下面的“高级”按钮,能够看到代理服务器已经被设置为127.0.0.1:8888了。网络
以下图:mvc
对非IE浏览器的设置也是自动的,在fiddler的选项中能够看出来app
点击fiddler的菜单“Tools”—“Fiddler Options…” 能够看到以下图:iphone
点击图中的“Copy BrowserProxy Confiuration URL”获得一个路径,也就是BrowserPAC.js的路径,该文件是fiddler用来设置非IE浏览器的代理的,至因而什么原理,不太清楚,可是根据该js的注释,以及fiddler选项连接的Tools tips提示,能够看出其做用就是设置非IE浏览器的代理的
这是fiddler软件的智能之处,每当开启fiddler软件以后,他会自动对系统中安装的浏览器进行代理设置,关闭fiddler以后,他也会还原这些浏览器的代理设置。
从这点上来说我以为fiddler比httpwatch更加好用。而浏览器的插件也能够知足大部分的web抓包需求。
(2).网络抓包工具
Wireshark
Sniffer
这类工具主要原理是经过底层驱动,监视网卡上流过的数据,而这个数据包含网络上全部的数据,包括从链路层一直到最上层应用层的全部数据包。这种抓包工具获取的网络数据包是最全面的,能够抓获除了http协议以外的其余数据包。针对网卡捕获,不须要设置。
从网络上面搜索到的资料看,要抓取手机中app的网络包有下面几种方式:
(1).将tcpdump移植到Android平台,而后在命令行下启动tcpdump进行抓包。Tcpdump程序实际上能够看做是wireshark的命令行版本,将该程序移植到Android平台直接抓包,这是一种最直接的抓包方式,而后将抓获的数据包文件,从手机传到windows系统上用wireshark打开进行分析,这种方式貌似不能用于苹果手机。
(2).使用fiddler,在windows系统上打开fiddler软件,该软件会将咱们的电脑变成一个代理,而后在手机上设置wifi网络,将代理指定为开启fiddler的那台电脑,而且端口设置为fiddler侦听的8888端口,这时候使用手机访问的数据,就会经过该代理,在fiddler中就能够看到http的数据包。这种方法我试了半天怎么都看不到数据包,不知道哪里出问题了,根据原理,这种方式支持能够经过代理访问网络的手机。因此从原理上说是支持Android和苹果手机的。
(3).经过各类方式在pc电脑上创建wifi热点,而后使用wireshark在pc电脑上监视该wifi热点,经过手机链接该热点访问网络。这样wireshark会获取全部流经该热点的数据包这种方式适用于全部可以无线访问的手机,也就是说全部的Android和苹果手机。
那么如何在pc电脑上创建wifi热点呢,有这么几种办法:
(1).Win7电脑通过设置,能够将无线网卡设置为wifi热点,这种方法我之前用过,能够成功,可是步骤繁琐,并且不必定可以成功,其余的windows系统估计就没戏了。
(2).使用软件自动创建wifi热点,不须要本身手工配置,这样的软件有Connectify Hotspot,猎豹免费wifi,360免费wifi软件,这几个软件我都使用过,比较好用,这种方式一样也只能针对有无线网卡的笔记本电脑,原理也是将笔记本电脑上的无线网卡创建热点了,只不过是软件自动的,不须要人工设置,比方法1要方便。
注意:通过实验发现,手机链接这种方式创建的热点,所发送的数据,用wireshark去抓包,须要捕获电脑上自己联网的那个“网络链接”,例如个人笔记本上面有一个“本地链接”,该链接是使用有线网络的。我用猎豹免费wifi软件创建一个热点以后,个人电脑上多出一个“无线网络链接3”,能够看到该“无线网络链接3”是猎豹生成的,可是我抓包的时候,wireshark须要捕获“本地链接”上的包,也就是个人手机访问的数据实际上仍是使用的“本地链接”,通讯IP也是“本地链接”上的IP地址,而在手机的wifi链接设置中看到的ip地址,在我抓的包中也搜不到,也就是说手机经过该热点访问网络,实际上仍是使用的“本地链接”的IP地址,至因而什么原理,我目前也不太清楚。可是下面要说的随身wifi硬件则与此不一样,随身wifi是创建了网卡。
(3).使用随身wifi硬件。这种也是很方便的方法,并且比较稳定,对笔记本电脑和台式机均可以使用。我以前买了一个360的随身wifi(不是打广告,本人对360公司不感冒,可是他的随身wifi作的确实还能够,同事中有买小米wifi的,不太稳定)。只要在360的官网上下载驱动,直接插上随身wifi就可使用,我推荐使用这种方法。
若是你用的是笔记本电脑可使用方法2,若是是台式机器可使用方法3。
下面重点说明,经过随身wifi创建热点,而后使用wireshark抓包的办法,其余方式创建热点抓包的原理同样,只不过是创建热点的方式不一样而已,抓包过程没有区别:
首先插入随身wifi:
使用手机链接上面的wifi,而后打开“网络和共享中心”,在里面点击咱们使用随身wifi创建的网络链接:
里面能够看到该连接的网卡物理地址,以及ipv6的地址信息,这应该是随身wifi创建的一个网卡,之因此要查看这些信息,是由于咱们要肯定wireshark抓包的时候抓取那个网卡的信息,通常电脑上有多网卡或者是有虚拟机可能也会生成虚拟网卡。
打开wireshark,选择菜单“Capture”—“Interface”在弹出的对话框中有一列是IP栏,能够看到除了本机的网络链接之外,好像其余的网络连接这一栏显示的都是IPv6的地址,其中咱们能够找到与上面网络链接信息中匹配的IP地址:
还能够点击该条目右边的“Details”按钮,打开详细信息对话框,在“802.3(Ethernet)”选项卡中,能够看到网卡的物理地址,该物理地址与上面的网络链接对话框中显示的物理地址是对应的:
这样能够肯定咱们须要抓取哪一个网卡的数据,肯定以后,直接点击该条目的“Start”按钮,使用连上该wifi的手机随便访问网络,就能够抓取全部包了,若是嫌查看网卡信息麻烦,你能够把这几个显示有数据包的网卡都抓包试一下,就应该能够看出来随身wifi对应的是那个网络链接了。
在手机上查看链接该wifi被分配的IP地址信息:
在wireshark的抓包结果中,经过地址与http协议过滤出该地址172.24.160.3相关的数据包获得以下的结果:
这些数据是我在小米手机上,经过UC浏览器浏览博格园电脑版网页抓获的全部数据包。
对于iphone手机的抓包过程没有任何区别。该方法能够抓获全部发送自手机的数据包,包括http与非http的全部数据包。
我的认为这种方式很是简单方便,抓取的数据包全面,并且经过随身wifi设置热点不须要任何繁琐的配置,仅仅是安装一个驱动而已,实际上随身wifi好像是新建了一个网卡。咱们只要用wireshark抓获该随身wifi创建的网卡的数据就能够了。对于从事app开发的园友来讲19块钱买一个wifi是很是值得的,这会为你的调试,以及研究别人的协议提供很是大的帮助。
本节主要讲解wireshark使用的一些经常使用的技巧,其实主要是使用过程当中,用的最为频繁的一些包的筛选规则。
Wireshark中有两种过滤器:
(1).捕获过滤器:告诉wireshark咱们只须要捕获知足什么条件的包,而不知足条件的包则不须要捕获。因为捕获过滤器是在wireshark在捕获过程当中采用的,因此捕获过滤器的过滤条件最多局限在传输层的协议,也就是能够经过ip和端口指定规则,而更加上层的应用层协议则不能用在捕获过滤器中。
语法: Protocol Direction Host(s) Value LogicalOperations Other expression
例子: tcp dst 10.1.1.1 80 or tcp dst 10.2.2.2 3128
解释:Protocol表示协议,Direction表示方向,Host指定IP地址,Value通常指定端口,可使用逻辑操做链接其余的表达式来生成复合表达式。例如:
tcp dst port 8888
捕获目的tcp端口为8888的包
ip src host 10.1.1.1
捕获来源地址为10.1.1.1的包
host 10.1.1.1
捕获目的或者来源地址为10.1.1.1的包
not icmp
捕获除了icmp包的全部包
有关更多的捕获过滤器请参考wireshark的文档
(2).显示过滤器:该过滤器是在已经抓到的包中筛选出本身想分析的数据包,也就是说该过滤器是在捕获工做已经完成以后作的,其数据基础就是已经捕获到的那些数据包,该过滤器支持的协议就是wireshark可以识别的全部协议,因为是在已经捕获下来的包中进行筛选,因此该过滤器中的条件表达式能够支持全部的上层协议,其筛选条件也能够根据每一个协议的不一样部分进行筛选。下面以HTTP协议为例子:
查看全部http请求的数据包(包括GET,POST等等的请求,只要是web请求都算)
全部POST请求的数据包
全部请求的URL中包含字符串”.jpg”的包
全部http响应状态码为200的包
能够看到HTTP协议有不少字段提供筛选,wireshark还支持matches操做符,进行正则筛选
查找全部http请求URL中包含 /mvc/字符串而且请求的是带参数的aspx页面的包
关于各类协议的字段文档能够查阅wireshark的文档,都有详细说明,包括协议的每一个字段部分的含义。其实对于作app或者是web开发的来讲常见的http筛选字段已经足够用了
此外wireshark除了能够根据协议的每一个字段的内容值进行筛选以外,还能够指定数据包中的第几个字节的二进制数据值进行筛选,这种经过包中二进制数据进行筛选的方法通常在socket的私有二进制协议中比较有用,这些协议通常是私有定义的,而且是基于二进制的协议,例如第几个字节表示什么意思,wireshark确定是不能识别这些包的,那么咱们能够本身根据二进制数据进行筛选
筛选出ip源或目标地址为172.16.1.126 而且udp端口为50798 而且rtp包的第2个字节的值是0xE0的包,这样的包是rtp数据包一帧结束的包。
固然上面的例子咱们是能够经过rtp协议的字段rtp.marker==1为条件来进行筛选的,举上面的例子是为了说明如何根据包中的二进制数据值进行筛选。
Wireshark有很是强大的抓包与过滤功能,本节也仅仅列举了其中最经常使用的筛选规则,在显示过滤器的规则中wireshark能够根据每一层的协议进行筛选,例如网络层(IP,ARP,ICMP等协议),传输层(TCP,UDP)等协议,应用层(HTTP,RTMP,RTSP等协议),各层协议的字段能够经过逻辑与(&&,and),或(||,or),非(|,not)等运算符链接成复合表达式进行过滤。
更加详细的wireshark的过滤规则能够参考wireshark的官方文档。
对博客园提点建议:上传相册的图片要是能批量上传就行了,每次写篇文章,上传十几二十张图片很是痛苦