Wireshark 食用指南
1月 13, 2022
最近看 HTTPS、TCP 的时候发现很多地方都会用 Wireshark 抓包来实际操作,于是系统地看了下。
Wireshark 历史 #
Wireshark(导线鲨鱼,前称 Ethereal,空灵)是一个免费开源的网络数据包分析软件。网络数据包分析软件的功能是截取网络数据包,并尽可能显示出最为详细的网络数据包资料。在GNU通用公共许可证的保障范围底下,用户可以以免费的代价获取软件与其代码,并拥有针对其源代码修改及定制的权利。
1997年底,密苏里大学堪萨斯分校毕业生杰拉德·康姆斯(Gerald Combs)在一家小型的互联网服务供应商上班,他需要一个能够追踪网络流量的工具软件辅助其工作,因此开始撰写 Ethereal 软件。此后,数以千计的人开始参与 Ethereal 的开发。2006年6月,因为商标的问题,Ethereal 更名为 Wireshark。
Wireshark 抓包原理 #
Wireshark 会从操作系统从网卡收到的数据包复制一份给自己进行分析。
网卡的工作方式 #
普通模式 #
网卡会发送本机的数据包给操作系统,其他的数据包会丢弃。
混杂模式(promiscuous mode) #
网卡会将所有通过他的数据包发给操作系统。
下图为 Wireshark 选择是否开启混杂模式。
过滤器 #
玩过 Wireshark 的都知道,Wireshark 可以抓取一段时间内的很多数据包,其中有一些是我们分析时不需要的,有一些是想专门显示出来的,那么我们可以通过过滤器来过滤流量。过滤器分为捕获过滤器和显示过滤器,捕获过滤器的过滤语法被称为伯克利包过滤语法,下面简要介绍一下。
伯克利包过滤语法 #
Berkeley Packet Filter,BPF。伯克利包过滤语法的限定符有三种。
- type:指代的对象,例如 ip 地址、子网或端口号。
- host(主机名和 ip 地址)
- net(子网)
- port(端口号)
- portrange
- dir:指代的数据包传输方向。
- src
- dst
- proto:与数据包匹配的协议类型。
- ether
- ip
- tcp
- arp
举一些例子:
- tcp dst port 80:只保留目标端口为 80 的 TCP 数据包。
- ip src host 192.168.1.1:只保留源地址为 192.168.1.1 的数据包。
- src portrange 2000-2500:只保留源端口在 2000~2500 范围的 UDP 和 TCP 数据包
- not icmp:保留除了icmp以外的数据包。
- src host 10.7.2.12 and not dst net 10.200.0.0/16:保留源地址为10.7.2.12,但目标地址不为10.200.0.0/16范围的数据包。
进阶语法:
- 也支持精确到位的过滤:
proto[expr:size]
,这种自定义偏移量的写法可以支持过滤更多类型的协议或各种标志位。 - 支持类似正则的简单表达式。
捕获过滤器(capture filter) #
只过滤符合捕获规则的数据,在开始捕获前可以进行设置,如下图。
显示过滤器(display filter) #
显示过滤器可以在捕获数据之后使用,另外显示过滤器的语法和捕获过滤器的语法不同。
通过这个输入框:
- 可以填协议(tcp/ip/http/udp),同时有自动提示。
- 右键搜索框还可以看到一个Display Filter Expression,也提供了编写帮助,如下图。
举个例子:
ip.dst == www.wireshark.org
http.request.full_uri == "www.baidu.com"
也可以选中数据包单行右键里面找“作为过滤器应用”快速操作。
捕获的文件与配置项 #
关于文件我列了几个必要的知识点,知道就可以,具体怎么操作稍微捣鼓一下就知道了。
捕获前和后都可以保存,也可以在保存的过程中拆分文件。
环状缓冲区,如果不希望文件无限增长,就选择这个(如下图)。
选项中的三个解析名称
- MAC地址解析(MAC地址到设备识别)
- 网络名称解析(IP 到域名,会使用 DNS 带来额外开销)
- 传输层解析(根据端口号和服务的对应表实现)
还可以自动停止捕获。
保存时可以指定符合过滤器的还是所有的。
显示过滤器可以保存。
可以切换环境和导出环境的配置(在界面右下角)。
参考 #
Wireshark 网络分析从入门到实践