四大网络抓包神器,总有一款适合你~

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四大网络抓包神器,总有一款适合你~相关的知识,希望对你有一定的参考价值。

参考技术A 无论是开发还是测试,在工作中经常会遇到需要抓包的时候。本篇文章 主要介绍如何在各个平台下,高效的抓包。

目前的抓包软件总体可以分为两类:

一种是设置代理抓取http包,比如Charles、mitmproxy这些软件。

另一种是直接抓取经过网卡的所有协议包,其中最出名就是大名鼎鼎的wireshark以及linux自带的抓包软件tcpdump。

下面重点介绍一下这四个抓包工具的特点以及使用。

wireshark想必大多数程序员都不会陌生。wireshark在各个平台都可以安装使用,它 可以抓取经过指定网卡的所有协议。 wireshark虽然很强大,但是对初学者其实不是很友好。

这也正是由于它太强大,它可以抓取所有包,所以初学者在使用时面对茫茫数据流不知所措。初学者需要认真的去学习怎么过滤得到自己感兴趣的包,但是如果不熟悉wireshark的过滤语法,要过滤数据包将举步维艰。

过滤语法简单介绍

wireshark的过滤语法总结起来其实也很简单,就是 以协议开头,后面可以跟着协议的属性,然后加上一些判断符号, 比如contains、==、>、<等等。比如只想展示http的协议内容,则直接在过滤器输入框中输入http即可。

如下图:

比如我 只想看http协议的请求头中uri包含’/api’的协议,就可以这么写:

如果想通过目标ip或者来源ip来过滤包,就不可以以http协议为前缀了,因为这些是ip协议的相关属性。 通过目标ip来过滤可以这么写:

上面表示目标机器的ip是61.135.217.100并且协议是http的包。

wireshark支持很多种协议,我们可以通过右上角的expression来打开搜索支持的协议,还可以找出协议支持的属性,然后填入期待的值,软件会自动为我们构建过滤语句。

优点:

功能强大,可以抓取所有协议的包

抓到的包容易分析

缺点:

由于线上服务器没有GUI,只有命令行,因此无法在线上服务器使用

无法分析https数据包,由于wireshark是在链路层获取的数据包信息,所以获取到的https包是加密后的数据,因此无法分析包内容。当然,我们可以对https数据包进行解密, 但是操作具有一定的复杂度,可能要消耗很多时间。

tcpdump是linux上自带的一个抓包软件(mac也有),功能强大,也可以抓取经过指定网卡的所有协议包。

由于是命令行工具,tcpdump抓取到的包不易于分析,一个常见的做法是将tcpdump抓到的包输出到某个文件,然后将文件拷贝下来用wireshark分析。

一些简单的过滤参数:

抓包内容输出到文件:

之后我们可以把test.cap直接用wireshark打开,就可以很直观的分析包了。

用tcpdump输出cap文件包:

tcpdump-r test.cap

Charles是一款http抓包工具,它是通过代理来实现的抓包。也就是我们在访问网页时需要配置代理,将代理指向Charles监听的端口,之后我们的http请求都会发向Charles的端口,之后Charles会帮我们转发并记录协议内容。

Charles的使用非常简单,配置好代理后,Charles就开始抓包了。

我们可以直接通过Charles的GUi查看包的内容:

上图中的unknown表示https加密后的数据,所以看到不协议的具体内容。我们可以通过安装Charles的证书,让Charles也可以查看https协议的具体内容。

优点 :

使用简单,只需配置一下代理地址就可以

要抓取https协议的配置也很简单,只要安装下charles的证书就可以了

mitmproxy是python写的一款http抓包工具,虽然只支持http抓包,但是它的特性非常强大,它不仅可以抓包,还可以对请求进行拦截、重现等操作。和Charles一样,它的原理也是基于代理,使用的时候需要设置代理指向它。

mitmproxy是命令行工具,但是也自带了mitmweb工具,可以让用户在网页上操作。另外,mitmproxy还支持用户自行编写插件,可以编写脚本对请求进行处理,然后把修改后的请求发出去。

1、安装 

首先需要在机器安装python3以及pip3.之后通过pip3安装

pip3 install mitmproxy

如果安装mitmproxy过程中报错ModuleNotFoundError: No module named '_ssl',就需要安装一下OpenSSL,然后再重新编译安装一下python3。

安装好openSSL后再执行pip3 install mitmproxy

2、使用 

安装后,直接在命令行输入mitmproxy就会进入它的交互界面:

这时候mitmproxy已经开始监听8080端口(默认),接着,我们可以去浏览器设置代理。浏览器设置代理的方式有很多,这里不多做介绍。

设置完代理后,访问浏览器的请求都会被发到mitmproxy上,mitmproxy根据规则对请求进行拦截(不配置拦截规则的话则都不拦截),所有经过的请求都会被输出:

在交互界面上可以通过快捷键操作请求。输入问号’?’,可以查看快捷键的文档。

3、下面介绍一些常用的快捷键和功能

① 请求过滤  

在请求列表交互界面,按下f键后,可以输入一些过滤规则:

具体的过滤语法可以按下’?‘键后,再按下方向键右’—>’或者l键。

② 请求拦截 

按下i键后,可以对指定的请求进行拦截。按mitmproxy收到指定条件的请求时,不会立马把它转发出去,而是等待我们执行resume操作后,才会把请求转发出去——在这期间我们甚至可以对请求进行手动修改。

红色字体表示该请求被拦截,之后我们可以按入a键来恢复该请求,可以输入A键恢复所有被拦截的请求。

③ 查看/编辑请求 

把指示光标移动到某个请求上,按回车可以查看请求的内容。或者鼠标直接点击请求也可以。

之后通过左右方向键可以查看request、response、detail等信息。

如果要编辑请求,可以在这个界面输入e,然后会让我们选择编辑哪块内容:

之后就会进入vim编辑界面编辑相应的内容了(保存后会生效)。

④ 重发请求 

mitmproxy的光标指向某个请求时,按下r键可以重发这个请求(重发前可以对该请求进行编辑)。

按下’:’键后,可以输入命令,这样我们就可以通过过滤规则批量的重发请求

replay.client是mitmproxy内置的一个命令,我们也可以自行编写命令。命令的编写可以参考官网文档,这里不做介绍。

⑤ 插件开发 

我们可以编写插件,然后再启动的时候指定插件,mitmproxy处理请求的时候会执行一个插件的链,这样我们就可以对请求进行编辑然后再发送出去了。

借用官网的插件demo:

这个方法对每一个请求进行处理,然后打印序号。通过mitmproxy -s test.py来让插件生效。通过插件可以绑定各种连接事件。感兴趣的朋友可以自行去mitmproxy官网看文档,这里不多做介绍。

⑥ 保存抓到的请求数据 

通过w快捷键我们可以把这次抓到的请求包保存到文件上。

通过mitmproxy -r file可以读取以前抓取的请求信息进行分析。

优点:

命令行操作,可以在无GUI界面的服务器上使用

对于这几个抓包神器,我总结了下使用场景:

只抓http协议的话:

推荐使用mitmproxy。mitmproxy丰富的功能不仅可以满足我们的抓包需求,还可以提升我们的工作效率。比如测试可以抓包后一键重发请求来重现bug,开发调试的时候可以修改请求内容等等。

如果是在线上的没有GUI的服务器:

推荐使用tcpdump,虽然mitmproxy也可以支持命令行抓包,但是生产环境的服务器最好不要乱安装第三方插件。另外,大多数服务器都有装tcpdump。我们可以通过把请求的内容输出到文件,然后拷贝会自己的电脑用wireshark分析。

想要抓取http以外的协议的话:

直接上wireshark。功能强大。对于Charles,感觉用了mitmproxy之后,就基本用不上Charles了。Charles好像也可以编辑后再发送,但是感觉不是很好用,可能我用的不是很熟吧。

一文学会,三款黑客必备的抓包工具教学(实在太强了,总有一款适合你)

咱们平时在开发对接的时候,前端和后端都习惯使用浏览器F12大法,通过network一栏查看接口通信情况,到底是谁的锅立马就能弄清楚。

浏览器与后端服务通信的一切都能在这个窗口看的一清二楚,不管是网络连接失败,还是后端报错,抑或是跨域问题,乃至数据格式不对,通过这里,都能找到答案。

可如果我们要分析的程序不在浏览器里面,又如何能看到他们的网络通信呢?这个时候就需要抓包了。

抓包是咱们程序员必备的基础技能,通过捕获计算机网卡的数据,来系统而全面的分析流经网卡的通信流量。

今天就来介绍几个抓包的神器,介绍一些你可能不知道的功能。

Wireshark

Wireshark可以说是抓包界的一哥了,二十年的老牌子,你值得信赖。

Wireshark支持几乎你知道的和你不知道的全部通信协议的分析,TCP/IP整个家族就不说了,这是基本要求,就连像Redis、MySQL、Mongo、ES等等这些上层应用的协议都能给你安排的明明白白,这就厉害了。

Wireshark优秀的架构设计使得它可以非常轻松的增加扩展以应对不断出现的新的应用层协议。

这是Wireshark的主界面,除上面的工具栏外,从上到下分为三个区域:

  • 数据包列表

  • 数据包协议解析树

  • 数据包原始数据

过滤

有时候一抓就是一大把数据,全部堆在一起,想要找到我们需要的,犹如大海捞针,这个时候你就需要过滤了。

在最上方,有一个搜索框,可以用来输入Wireshark的过滤表达式,比如我只想看其中的HTTP数据包,只需输入“http”即可。

你可以通过IP、端口、协议等多种组合式过滤,如下面的一些例子:

  • eth.src[0:3] == 00:00:83

  • ip.addr == 192.168.0.1

  • tcp.flags.syn == 1

  • tcp.port in 443 4430..4434

  • http.request.uri == "https://www.wireshark.org/"

完整的过滤表达式语法规则请参考:

https://www.wireshark.org/docs/wsug_html/#ChWorkBuildDisplayFilterSection

会话

不同的人有不同的使用习惯,像我就不太喜欢上面图中那样所有数据包堆在一起,看起来非常的杂乱。

没关系,Wireshark提供了会话的分析视角,以会话的形式来将所有数据包分门别类,这一下清晰了不少。

通过菜单 统计(Statistics)-> 会话(Conversations)可以调出会话窗口:

从底层到上层,总共分了链路层会话、IPv4会话、IPv6会话、TCP会话、UDP会话总共5个tab页,从5个不同的维度进行会话分析。

下面的Follow Stream按钮,还可以详细展示这一个会话的所有通信内容:

会话内容用红色和蓝色两种颜色的字体来区分通信的双方,默认双方数据都进行了展示,你也可以过滤只展示某一方的通信内容:

协议树

协议树提供了另外一个维度来全局总览所有数据包,通过协议树,也可以快速定位到关注的数据包。

内容解码

Wireshark还有一个比较强大的功能:内容解码。

对于很多格式的数据,直接查看数据包原始内容是看不出个所以然的,比如压缩文件、图片文件等等,这个时候就需要能够对内容进行解码。

如下图所示,选定数据范围后,右键可选择:Show Packet Bytes···

该菜单选项显示数据包内容,弹出如下窗口:

上面是我之前的一次红包闯关活动的数据包,这是一段gzip压缩后的数据,我们可以先选择解码方式为Compressed:

可以看到,上面的数据内容变成了解压缩后的内容,.PNG开头表示这是一个PNG图片。接下来再在Show as菜单中选择图片,图片就能显示出来了!

可以看到,除了图片,还支持网页渲染、多种字符集解码等等。

科来网络分析系统

接下来给大家推荐另一个数据包分析神器:科来网络分析系统

这是一家成都公司开发的抓包软件,也有近二十年的历史了,历经多个版本迭代,稳定靠谱!

相比Wireshark,这个软件纯中文界面,大量的可视化图表,更现代的UI展示,让大家学习计算机网络更加轻松,尤其是对新手小白而言,更容易上手。随意截了几个图,大家感受一下:

首页:

从协议、端点、流量的维度展示了一些全局统计信息。

数据包列表:

在展示数据包内容时,与Wireshark类似,也是分了数据包列表、数据包协议解析树状图、数据包十六进制原始数据。

协议树:

会话矩阵:

会话矩阵视图可以清晰的看到节点之间的通信关系。

进程关联通信流量:

将通信流量与各个进程相关联,可以很方便的关注目标程序的通信,不用在茫茫数据包中去搜寻。

TCP会话

重点给大家介绍一个TCP会话流的功能。

以往咱们大家在学习TCP协议的时候,各种文章给你介绍什么是三次握手、四次挥手、超时重传、拥塞控制、滑动窗口等等机制,还给你画一堆图展示。

这样好是好,但时间一久还是免不了会忘记,不过有了这个软件,妥了!

在TCP会话的视图界面,通过通信双方的交互时序图,可视化的呈现了TCP的通信双方数据包的来往通信详情。在这个视图下,什么三次握手四次挥手,还是超时重传都看的清清楚楚。

箭头的指向代表了数据包的方向,箭头上下之间的间距代表了数据包发送的时间间隔,不同的颜色代表了不同的数据包,正常的、异常的、有负载数据的都一清二楚,让你瞬间对这一个TCP通信会话的情况了然于心。

除了抓包,科来网络分析系统还支持非常多的数据格式,你可以在使用Wireshark、tcpdump等工具抓了包以后,导出文件在这个软件中打开分析,提升你数据分析的效率。

Fiddler

如今的互联网流量中,HTTP要说第二,估计没别的协议敢说第一。而随着时间推移,越来越多的HTTP升级为了HTTPS,据不权威渠道的数据,到2020年,互联网上超过70%+的HTTP流量都加密传输了,这对于网络安全不得不说是一件好事。

不过总有一些场景,我们需要看一下HTTPS传输的内容,而用上面两个抓包工具,抓下来的都是加密数据,想要获取明文内容,还得另辟蹊径。

接下来就是Fiddler登场的时候了!

Fidder解密HTTPS的原理其实很简单,就是通过设置代理服务器,自己作为中间人,使用自己的证书“冒充”服务器证书,从而骗过客户端。

那这HTTPS岂不是一点都不安全?先别急,能骗过客户端的前提是Fidder的证书得被系统信任,否则是过不了SSL/TLS的认证的,Fidder启动的时候会把自己的证书安装到操作系统中获得信任,因此可以解密当前电脑上自己的通信流量,所以放心,你的HTTPS流量不会那么容易被别人解密。

比如下面,我们打开百度的官网,在开启Fiddler之前和开启Fiddler之后证书的变化。

开启Fiddler之前:

开启Fiddler之后:

这个Fiddler证书可以在系统的全部根证书列表中找到:

抓手机App通信

除了抓电脑上通信的包,Fiddler还经常被用来抓取移动设备上的APP通信流量。

基本上绝大多数的APP都是用HTTPS来进行通信,只需要在手机上配置Fiddler为代理服务器,手机上的通信流量都能看的清清楚楚。

以安卓手机为例:

Fiddler运行的电脑和手机确保在同一个局域网下,在手机连接的WIFI网络中,可以使用高级功能设置代理:

配置完成,手机上任何APP的风吹草动,Fiddler都会源源不断的给你展示出来。

不过这一招也不是万能的,据我的实际测试,一些安全做的比较好的APP,比如微信,会检测到当前的HTTPS服务器证书有问题,部分功能会表现出跟平时不一样的现象。

甚至,还有的APP侦测到环境异常后,会把服务器的证书偷偷传到它的服务器去,至于传上去干啥,你猜?

结尾:

好了,以上就是三款抓包工具的介绍了,你Pick谁呢?学会这三款抓包工具,你一定会是个抓包小能手~对于分析排查问题绝对大有裨益!

为了大家省事,我已经把三款软件安装包打包收集了,还附有一套抓包分析的教程,在后台回复:抓包,自动获取哦!

以上是关于四大网络抓包神器,总有一款适合你~的主要内容,如果未能解决你的问题,请参考以下文章

一文学会,三款黑客必备的抓包工具教学(实在太强了,总有一款适合你)

抓包神器 tcpdump 使用介绍

抓包神器 tcpdump 使用介绍 (转)

测试必备工具之最强抓包神器 Charles,你会了么?

抓包神器--HttpCanary

Liunx 网络神器之抓包 --tcpdump