前言
西普教育的铁三训练营的课程有很详细的关于wireshark视频教程,正好对wireshark这款神器也不是太熟悉,一边学习补漏,一边做一个学习笔记与大家分享
页面功能简介
- 主界面中,波动的线代表网卡传输信息的波动,以实际网卡为准。如图:
- 封包列表,表示所有捕获的数据包。这里可以观察到发送方的IP地址,接收方的IP地址,协议端口号,以及封包内容。如图:
- 封包列表信息中显示被选中项目的详细信息,信息按照不同OSI layer进行分组,可以分别点开查看。如图:
- 解析器,在Wireshark中也被叫做16进制数据查看面板。显示内容与封包详细信息中相同,只是以16进制的格式或者二进制的格式显示,右键在解析器空白处单击,即可切换以16进制或者二进制格式显示。如图:
- 从左到右,分别为启动按钮,停止按钮,重新启动按钮,网卡接口设置按钮。如图:
- 图中分5个矩形将按钮分组,从左到右分别为:第一个分组,捕获的数据包文件操作。第二个分组,数据包的组操作。第三个分组,捕获的数据包滚动并将不通的协议进行颜色标注。第四个分组,调整文字大小。第五个分组自动选择合适的距离完整显示封包列表的各项内容。如图:
- 显示过滤器,它是wireshark特别重要的功能,有了它就可以通过特定过滤规则让wireshark只显示我们需要查看的数据包。如图:
实验一:抓取ping包筛选并保存
- windows打开cmd,运行命令
ping baidu.com -t
,如图: - 点击捕获选项,选择为当前连接的wlan,点击开始捕获,一段时间后停止捕获,通过过滤器即可完整看到icmp协议的ping baidu包,如图:
wireshark统计功能介绍
- 正常流程完成wlan抓包,菜单栏中选择“统计”—〉“捕获文件属性”;弹出“捕获文件属性”对话框。显示捕获文件的一般信息,第一个包和最后一个包的时间戳,以及文件捕获于哪一个接口;在定义过滤条件的时候,将显示过滤后的数据,以及平均报文数,字节数。如图:
- 关闭“捕获文件属性”对话框,选择“统计”—>“协议分级”;协议分级统计窗口显示为,捕捉文件包含的所有协议和树状分支。分组百分比永远参照的是相同协议层。如图:
- 关闭协议分级统计对话框,选择“统计”→“对话”;通过选项卡选择,即可调整显示的数据。第一层为以太网统计数据,第二到三层为IPv4和IPv6统计数据。第四层和第五层为TCP和UDP统计数据。右下角的选项卡还可以选择更多选项,如图:
- 关闭conversations对话框,在菜单栏中选择“统计”→“Http”→“请求”;通过对话框可以观察到,所有的http请求数据统计结果。如图:
wireshark显示过滤器介绍
- 介绍
- 显示过滤器为了进行分析帮助,将不需要或者是已经排除的数据包进行显示屏蔽。
- 显示过滤器是在已经捕获的数据包中进行查找然后根据定义的表达式进行区别显示。
- 显示过滤器是一种更为强大(复杂)的过滤器。
- 它允许您在日志文件中迅速准确地找到所需要的所有记录。通常经过捕捉过滤器过滤后的数据还是很复杂。此时您可以使用显示过滤器进行更加细致的查找。
- 它的功能比捕捉过滤器更为强大,而且在您想修改过滤器条件时,并不需要重新捕捉一次。
- 过滤器语法结构
语法: | Protocol | Direction | Host(s) | Value | Logical Operations | Other expression |
例子: | tcp | dst | 10.1.1.1 | 80 | and | tcp dst 10.2.2.2 3128 |
示例:
(host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8
- 1
捕捉IP为10.4.1.12
或者源IP位于网络10.6.0.0/16
,目的IP的TCP端口号在200
至10000
之间,并且目的IP位于网络 10.0.0.0/8
内的所有封包。
- 最简单的显示过滤器可基于协议,应用,域名或者字符进行编写。对大小写敏感,绝大多数简单的显示过滤器表达式由小写字母组成。
- wireshark自带快捷显示过滤器语法支持
- wireshark过滤匹配表达式实例
1、 搜索按条件过滤udp
的数据段payload
(数字8是表示udp
头部有8个字节,数据部分从第9个字节开始udp[8:]
)
udp[8]==14 (14是十六进制0x14)匹配payload第一个字节0x14的UDP数据包udp[8:2]==14:05 可以udp[8:2]==1405,且只支持2个字节连续,三个以上须使用冒号:分隔表示十六进制。 (相当于 udp[8]==14 and udp[9]==05,1405是0x1405)udp[8:3]==22:00:f7 但是不可以udp[8:3]==2200f7udp[8:4]==00:04:00:2a匹配payload的前4个字节0x0004002audp contains 7c:7c:7d:7d 匹配payload中含有0x7c7c7d7d的UDP数据包,不一定是从第一字节匹配。
2、搜索按条件过滤tcp
的数据段payload
(数字20是表示tcp
头部有20个字节,数据部分从第21个字节开始tcp[20:]
)
tcp[20:] matches "^GET [ -~]*HTTP/1.1\\x0d\\x0a"等同http matches "^GET [ -~]*HTTP/1.1\\x0d\\x0a"tcp[20:] matches "^GET (.*?)HTTP/1.1\\x0d\\x0a"tcp[20:] matches "^GET (.*?)HTTP/1.1\\x0d\\x0a[\\x00-\\xff]*Host: (.*?)pplive(.*?)\\x0d\\x0a"tcp[20:] matches "^GET (.*?)HTTP/1.1\\x0d\\x0a[\\x00-\\xff]*Host: "tcp[20:] matches "^POST / HTTP/1.1\\x0d\\x0a[\\x00-\\xff]*\\x0d\\x0aConnection: Keep-Alive\\x0d\\x0a\\x0d\\x0a"检测SMB头的smb标记,指明smb标记从tcp头部第24byte的位置开始匹配。tcp[24:4] == ff:53:4d:42检测SMB头的smb标记,tcp的数据包含十六进制ff:53:4d:42,从tcp头部开始搜索此数据。tcp contains ff:53:4d:42tcp matches "\\xff\\x53\\x4d\\x42"检测tcp含有十六进制01:bd,从tcp头部开始搜索此数据。tcp matches "\\x01\\xbd"检测MS08067的RPC请求路径tcp[179:13] == 00:5c:00:2e:00:2e:00:5c:00:2e:00:2e:00
3、其他
http.request.uri matches ".gif$" 匹配过滤HTTP的请求URI中含有".gif"字符串,并且以.gif结尾(4个字节)的http请求数据包($是正则表达式中的结尾表示符)注意区别:http.request.uri contains ".gif$" 与此不同,contains是包含字符串".gif$"(5个字节)。匹配过滤HTTP的请求URI中含有".gif$"字符串的http请求数据包(这里$是字符,不是结尾符)eth.addr[0:3]==00:1e:4f 搜索过滤MAC地址前3个字节是0x001e4f的数据包。
注:符号就是正则里的基本用法,略过