做过网络方面开发的同学都知道,一个适用的抓包工具对工作问题的分析是很有用的。前段时间我也在折腾网络方面的相关开发,所以又重新使用了一下网络抓包工具。接下来就介绍一下现在用的比较多的几个网络抓包工具。
基本介绍:
1、wireshark:
wireshark的前身是Ethereal,2006年因为其创始人Gerald Combs的跳槽而改名为wireshark。它是一个跨平台的软件,可以在unix系列、linux、mac os、windows等多个平台上面进行网络协议抓包工作。同时他也是一个开源软件,有兴趣的话可以下载源码深入了解。我们可以通过wireshark官网进一步了解相关知识及下载该软件。
2、fiddler
fiddler的定位是网页调试工具,能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据。我们还可以为fiddler安装自己所需的插件,从而更好的利用fiddler的强大功能。详细介绍信息可以通过fiddler官网进一步了解,
3、IEInspector HTTP Analyzer
IEInspector HTTP Analyzer同样能够提供监控、跟踪、调试和分析http/https的功能。HTTP Analyzer的很多特色功能在这里有比较详细的介绍,如果你有这方面的需求,可以从进一步了解。不过,这是一个付费软件,你可以先使用一段时间,试用版下载地址。
4、sniffer
还是大学的时候用过这个这个抓包工具,那个时候还是觉得这个工具挺神奇的,后来用的就用的少了。前段时间想重新装一次试试,发现其安装过程太繁琐了,并且安装后没法侦听到网卡,估计是因为自己下载的版本太低的缘故。反正现在也只是抱着再玩玩这个工具的心态去装的,用不了所以就放弃卸载了。
深入了解:
对于上述的四种抓包工具,个人是比较推荐wireshark和fiddler的,这两个工具在功能上基本可以互补,能完成你的抓包常用需求,是网络开发的利器。下面我也会重点介绍这两个工具,并会简要分析这两个工具的异同点,同时也会尝试着去了解这两个工具的部分实现方式。
至于这两个工具的使用方式就不做过多介绍了,网上这方面的教程比较全,下面的提到的几篇文章应该已经能够基本满足需求,讲的也足够详细,我也是通过看这些文章来开始熟悉使用的。
wireshark使用教程:
1、Wireshark抓包工具使用教程以及常用抓包规则
2、wireshark的使用教程
上面的简单介绍里面已经讲到了wireshark开源和跨平台的特点,接下来介绍一下wireshark的其他几个重要的特点。
wireshark的界面开发用的是GTK+ widget toolkit,当然如果你不喜欢界面, TShark也还是能满足你的需求。
wireshark使用pcap network library来进行封包捕捉。Lipcap(Linux)或者Winpcap(Windows)。windows平台下,在安装wireshark的时候你就会发现会提示你安装winpcap,当然,如果你已经安装过了就没有这个提示了。
WinPcap(Windows Packet Capture)是Windows平台下的链路层网络访问工具,其目的在于为Windows应用程序提供访问网络底层的能力。
WinPcap功能:
获得网卡设备列表及其高级信息
打开一个网卡适配器并将其设置成混杂模式
捕获数据包
设置过滤器
将数据包存储为文件并处理离线文件
发送数据包
收集网络通信流量的统计信息
但是,WinPcap不能修改数据包或者拦截数据包
WinPcap架构:
网络数据包过滤器(Netgroup Packet Filter,NPF)是一个协议驱动,是WinPcap的核心部件,它处理网络传输的数据包,并向应用层提供捕捉、发送和分析数据包的服务。
packet.dll是一个提供了一系列底层函数的动态链接库,功能包括:
安装、启动和停止NPF驱动设备
对网络数据包进行嗅探
发送原始的数据报
获取网卡列表和每一个网络的相关信息
对网卡查询和设置底层参数
能Wpcap.dll是一个含有WinPcap公共API的动态链接库,它导出一系列函数供捕获网络数据包和分析网络,功能包括:
对网络数据包进行嗅探
发送原始的数据报
获取网卡列表和每一个网络的相关信息
将数据包信息保存到磁盘
在更高层上创建包过滤规则并应用到底层
因为使用winpcap是直接进行网卡抓包的,所以Wireshark能够捕获到经过网卡的所有包,但是这样也造成在用wireshark对HTTPS包抓取的时候它只能抓到解析前的包数据,一般情况下不能直接解析,当然如果你一定要解析内容页是可以做到的,网上搜索一下也能找到相关的教程。
winpcap的进一步了解可参考 WinPcap技术手册 V4.1.2。
wireshark另外一个非常强大的功能呢就是它的过滤器,包括DisplayFilters和CaptureFilters,熟练配合使用这个这两个Filter能够让你只看到你所需要的包。
捕捉过滤器(CaptureFilters):用于决定将什么样的信息记录在捕捉结果中。需要在开始捕捉前设置。
显示过滤器(DisplayFilters):在捕捉结果中进行详细查找。他们可以在得到捕捉结果后随意修改。
当然这个过滤器的种类也是非常之多,要想能过熟练使用也绝非易事。过滤器Display Filter Reference介绍。
另外wireshark也支持一部分功能的扩展,wireshark对常见协议的支持已经比较完善,当然,如果你需要它对某些新协议进行支持的话你也可以安装相应的插件。
fiddler:
1、Fiddler 教程
2、抓包工具Fiddler的使用
fiddler的实现方式和wireshark不同,它并不对网卡进行监听,而只是以代理web服务器的形式工作。它使用代理地址:127.0.0.1,端口:8888。当Fiddler退出的时候它会自动注销,这样就不会影响别的程序。他的实现方式也解释了为什么使用fiddler进行网络抓包的时候,当某些应用进行没有真实证书的https访问的时候,fiddler会有一个弹出框警示。
fiddler的实现方式如下图,从它的实现方式中我们可以很简单的看出,fiddler只支持http/https协议的抓取,这也从实现角度上解释了它定位成网页调试工具的原因。
监听网卡和代理web服务器这两种实现方式还是有挺大区别的。Fiddler能嗅探到HTTP代理的任意程序的数据包,但实际情况是,很多应用程序在一些账号登陆的流程上是没有走http代理的,之前在尝试抓有些应用的登陆过程时就看到了这个问题。
当然,fiddler的这种代理服务器的实现方式也让它能够设置断点,并可以再此基础上修改request和response报文内容。
fiddler能支持https协议的分析,当然,前提是你先允许它抓取https数据,这个可以自己设置。像chrome这种登陆密码不加密的工具,完全可以用fiddler来侦听到用户名密码。(之前这个理解有误,更正一下。fiddler能够抓到https协议中的内容(如Chrome这种自己不加密密码而是用https加密的工具的用户名密码),原因是fiddler以一个本地服务器的形式工作,当chrome向自己服务器请求一个https的证书时,fiddler会在中间截下来,然后返回一个它自己能够解析的https证书,并同时向真正的服务器再请求一次,并保存真正服务器返回的证书。chrome收到fiddler返回的证书后开始用这个证书加密数据,再将数据上传。fiddler在截到这份数据后,因为是自己给的证书,所以它能正确的解析出数据,同时将原始数据再用真正的证书加密一次,并上传至真正的服务器。这样就实现了https内容的抓取。)
另外,新版fiddler还能支持win8 metro的抓包,之前开发win8 app的时候一直没有找到一款合适的抓包工具,现在看来fiddler帮我们解决这个问题了,详细介绍可以参考Fiddler and Windows 8 Metro-style applications。
如果你想进一步研究fiddler,可以买fiddler创始人写的《Debugging with Fiddler: The complete reference from the creator of the Fiddler Web Debugger》这个书来深入研究。不过老美挺看重版权的,所以无论电子书还是纸质书都挺贵。
因本人知识水平有限,如有错误的地方欢迎指正。