linux wireshark_wireshark 使用指南

7891e4d6454d61e4677b4a2027dc0299.png

what?

wireshark(前称Ethereal)是一个免费开源的网络数据包分析软件。网络数据包分析软件的功能是截取网络数据包,并尽可能显示出最为详细的网络数据包资料。
在过去,网络数据包分析软件是非常昂贵,或是专门属于营利用的软件,然而Wireshark的出现却改变了这种生态。[原创研究?]在GNU通用公共许可证的保障范围底下,用户可以以免费的代价获取软件与其代码,并拥有针对其源代码修改及定制的权利。Wireshark是目前全世界最广泛的网络数据包分析软件之一。
1997年底,Gerald Combs需要一个能够追踪网络流量的工具软件作为其工作上的辅助。因此他开始撰写Ethereal软件。
2006年6月,因为商标的问题,Ethereal更名为Wireshark。
-- 摘自维基百科

why?

日常开发中,我们经常会遇到需要抓包的场景。通过抓包,我们可以验证接口响应的结果是否与我们预期一致。市面上有非常多的抓包软件,以mac平台为例,charles便是其平台上使用非常广泛的抓包软件。charles非常优秀,界面简洁优美,展示也非常清晰。但是charles能够抓取到的网络包有限,当出现以下情况的时候,charles也许就无能为力了:

  • 抓取非HTTP包,比如你想抓包体验TCP三次握手的过程
  • 抓取未经设置的flutter应用时,使用charles抓取不到数据包
  • ...

为什么flutter的应用发出的请求charles无法抓取到呢?

这跟charles这类软件的工作原理有关系,charles会启动一个代理服务器,当客户端系统配置代理以后,请求包会经由charles的代理服务器到互联网中,因此charles才能够抓取到请求包。但是这种情况有个前提:就是当客户端系统配置代理以后,客户端软件要用客户端系统中的代理进行访问。

但是flutter中的网络库,默认情况下不会使用系统代理。这也就是为什么你配置了系统代理仍然抓取不到flutter包的原因。

为什么wireshark拥有比charles更强的能力呢?

不同于charles,wireshark工作的时候,会借助Winpcap(windows)/Libpcap(linux)/AirPacp(无线网卡驱动)直接与网卡进行数据交换,进出网卡的数据流量都能被wireshark所捕获。因此,就比基于代理原理的抓包工具拥有更强的能力。(这里说网卡也许不那么准确,准确来说是 Network Interface 不过一般来说interface对应实体网卡,但是也可以对应虚拟网卡。关于Network Interface的具体含义可以参考JDK官方文档:https://docs.oracle.com/javase/tutorial/networking/nifs/definition.html)

763b67fda3fabb76ae9bd4292011e675.png

(正在监听底层数据网卡流量的wireshark)

how?

使用wireshark抓取本机

所谓本机就是运行wireshark的机器,只需要在wireshark启动的时候选择想要捕获的网卡即可。

615a44cbc1e7924d660aacac810f214c.png

使用wireshark抓取手机

以iphone为例可以参考:https://www.jianshu.com/p/428503609bc1

使用wireshark抓取虚拟机/模拟器

抓取手机上的网络包时候,还是需要做一些前置配置的,比如上面抓取iphone的包。如果你没有数据线,或是懒得将目光在自己的手机和电脑之间切换。那么在电脑上装上一个安卓虚拟机/模拟器或是ios虚拟机/模拟器应该是个更好的选择。由于虚拟机/模拟器的流量是通过宿主机的网卡发送到互联网上,因此,启动模拟器之后,你只需要像监听宿主机的网卡即可捕获到模拟器中的流量。

wireshark使用界面

bd6dec67878a43cf5e888ebe67d40117.png
1》开始捕获数据包
2》停止捕获数据包
3》停止然后重新捕获数据包
4》捕获过程的设置,比如设置捕获哪些网卡。只有在捕获停止的时候才能进行设置,正在捕获时不能设置。
5》打开自己曾经捕获的数据包文件
6》保存当前捕获的数据包为文件
7》关闭当前打开的数据包文件
8》重载当前打开的数据包文件
9》可以对包中的文本进行搜索

ad52809725f249afbf2a61abfb688ed3.png


10》选中当前记录的上一条记录
11》选中当前记录的下一条记录
12》跳到指定编号的包记录
13》跳到当前捕获包列表中的第一条记录
14》跳到当前捕获包列表中的最后一条记录
15》抓取过程中,自动定位到最下面一条记录(最新的记录),可以想象成linux中的tail命令
16》使用预定义的颜色规则对捕获的包进行着色

246aa102f222429d25d2896e6bbcb4ec.png


17》放大界面
18》缩小界面
19》重置界面
20》自适应界面
21》捕获的包列表,每个记录为一个包
22》捕获包的具体内容 该内容显示结果对用户不友好,可以借助23来分析包内容
23》包的分层解析结果 以一条http请求包为例,wireshark会解析出该包每层内容
如下图所示1为http协议,2为tcp协议,3为ip协议

6e6cd37c36c3fb5a746587916f31e3e8.png


24》包搜索框,与9功能不同的是:此处填写的是符合wireshark定义规则的包过滤表达式,可以理解为数据库中的sql语句。

包过滤表达式

当我们想要过滤出来源ip为10.0.0.5的数据包时,我们可以在表达式搜索框24中输入以下表达式语句:

ip.src==10.0.0.5

问题在于:

ip这个名字是怎么来的?

怎么知道ip有src这个属性的?

除了等号运算之外表达式还支持什么逻辑运算?

前两个其实是同一个问题:

可以通过 view->internals->supported protocols 查看wireshark能够支持的协议,以及每个协议的属性。

f26a25f891ee57adc013d86c9fa60f5c.png

7e903a47d2fe356352b69be519a63178.png

从上图就可以知道,wireshark支持你过滤http协议的包,并且,你也知道了http协议有很多属性,其中3处http.accept就意味着你可以用这个属性去过滤包了。

最后除了等号以外,wireshark还支持以下运算符,其中,english的写法和c风格的写法是一样的,意味着你在

ip.src == 10.1.1.10 与 ip.src eq 10.1.1.10 的过滤效果是相同的

wireshark支持的比较运算符:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值