linux wireshark_【工具集】WireShark工具使用

根据官网的定义,WireShark是一个网络协议分析器(network protocol analyzer)。所以这个产品市场定位是对网络协议进行分析,由于它附带了抓包功能,所以又有人称为抓包工具,但是为了区分,我更愿意叫它包分析工具,因为包分析才是它核心功能。

使用场景

   包分析工具的使用场景普遍是在trouble shooting的时候,在排查故障或者调试阶段会用到,特别是碰到
一些奇怪现象时,往往就得派上用场。
1.在linux机器上使用tcpdump抓包工具抓取网络包保存成文件。
2.在WireShark导入文件进行网络包分析。

如何找到你要的网络包

两种过滤器

  如何在一堆已经捕获的数据包里找到你需要的网络包这个是关键的一步,WireShark提供两种过滤语言:
  捕捉过滤器(capture filters)和显示过滤器(display filters)。

  本质区别:
  1.capture filters是在捕捉阶段就对网络包进行过滤了,这样子捕捉得到的所有包都是过滤后的了,漏掉
    的网络包就找不到了,是捕捉级别上的过滤。
  2.display filters是对捕捉到的网络包进行显示过滤,是显示级别上的过滤。
   
  capture filters在时间上是display filters的上游,或者说display filters是对
  capture filters后的网络包再进行显示上的过滤。我称它为过滤链:
  capture filters->display filters.
  
  实际使用中,WireShark的capure filters很少用到,一是为了防止漏掉有用的网络包,除非你已经百分
百确定你的过滤表达式是符合需求的。另外一个原因就是capure filters其实属于WireShark的抓包功能,
一般linux上我会使用类似tcpdump这种抓包工具,然后直接将捕捉到的网络包以文件形式直接导入到
WireShark,根本用不到capture filters。当然,tcpdump的这类抓包工具肯定也有类似
capture filters的功能。

显示过滤器(display filters)

在官网中的wiki链接里提供了一些过滤表达式的例子(https://wiki.wireshark.org/DisplayFilters).
这些例子可以消除刚开始接触的陌生感,快速上手。  

display filters提供的表达式包括:
1.协议
2.某个字段的存在
3.某个字段的值
4.两个字段的比较
......

既然这是一种表达式语言,是语言就应该有语法,所以掌握该表达式的基本语法是关键而不是去死记具体的表达式。

官网有一个章节专门讲如何构建过滤表达式
(https://www.wireshark.org/docs/wsug_html/#ChWorkBuildDisplayFilterSection).
里面描述了过滤表达式的组成,可以概括为三个部分:

【过滤字段】【比较操作符号】【具体值】

 比如:
 ip.addr == 192.168.0.1
 
 解释:
 ip.addr就是一个过滤字段, == 就是一个比较操作符,192.168.0.1就是具体的值。

过滤字段】和 【比较操作符】其实是一个集合,我们从WireShark定义好的【过滤字段】集合里的取出我们想
要的,从【比较操作符】集合里取出我们想要的,然后结合【具体的值】就可以组装成一条过滤表达式了。

如何知道WireShark支持的所有过滤字段?
通过WireShark界面里的View → Internals → Supported Protocols。

如何知道WireShark支持的所有比较操作符?
官网里列出了当前所支持的:
https://www.wireshark.org/docs/wsug_html/#DispCompOps

当然除了比较操作符号,还支持其它类似比较操作服的操作,比如成员操作符:
tcp.port in {80 443 8080}, 语法大同小异,更多的就自己去查阅了。

如何分析具体的某个网络包

   既然定位到了我们想要的网络包,接下来就是如何分析这个网络包了。WireShark的界面其实主要划分为了
3个板,分别是
The “Packet List” Pane;
The “Packet Details” Pane;
The “Packet Bytes” Pane。

(1)Packet list就是列出了所有的网络包,我们可以通过display filters来过滤出我们感兴趣的包。

(2)Packet Details显示的信息是我们鼠标点击Packet list中的某个网络包对应的网络分层协议的文字
解释信息(OSI网络模型。

(3)Packet Bytes对应的板块显示的就是第一点中选中的网络包的完整原始字节信息(左边是十六进制显示,
右边是ascii显示)。毕竟我们知道,网络包数据肯定是二进制的。
另外一个就是我们在Packet Details Pane中选中某个一个网络层,在Packet Bytes对应的二进制数据会
高亮显示。

v2-ffba06fe122e08b6c95a6d4496a0e787_b.jpg
WireShark 界面(mac OS版)

解释:

1.上面截图中上中下三个红框部分分别就是Packet List pane,packet details pane,
packet bytes pane.
2.packet bytes pane中左边蓝色框为十六进制显示,右边蓝色框为ascii显示。
虽然截图中ascii显示貌似没什么作用,但对于传输的数据是英文单词来说,还是有用的。
3.一开始也许对于packet details pane不是很能看懂,其实它是按数据包的osi模型分层协议进行解释。
Frame xxx 表示分析的是osi模型的物理层协议头,描述的数据帧xxx。
Ethenet II表示分析的是osi模型的链路层协议头。
Internet protocol  version 4(ipv4)表示分析的osi 模型的网络层协议头。
Transmission Control Protocol(tcp): 表示描述的osi模型的传输层。


为什么物理层,链路层,网络层只分析了对应的协议头呢,内容部分呢?
某层的数据包是由协议头+协议内容两部分组成。
我们知道osi模型中,每一层协议都会在上一层协议的基础加上自己的包头定义,所以Packet Details Pane
中除了最上层,下面各层解释的只是当前协议的协议头,不包括包内容部分,毕竟包内容部分应该找上一层协议
(一直到最顶层协议)。

reference:

1.Wireshark User’s Guide:https://www.wireshark.org/docs/wsug_html_chunked/

觉得本文对你有帮助,不妨点个赞和关注!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值