一、wireshake简介
Wireshark是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用 WinPCAP 作为接口,直接与网卡进行数据报文交换。
网络管理员使用 Wireshark 来检测网络问题,网络安全工程师使用 Wireshark 来检查资讯安全相关问题,开发者使用 Wireshark 来为新的通讯协议除错,普通使用者使用 Wireshark 来学习网络协议的相关知识。当然,有的人也会“居心叵测”的用来寻找一些敏感信息.
二、WireShark 快速分析数据包技巧
(1)确定 Wireshark的物理位置。如果没有一个正确的位置,启动 Wireshark 后会花费很长长的时间捕获一些与自己无关的数据。
(2)选择捕获接口。一般都是选择连接到Internet 网络的接口,这样才可以捕获到与网络相关的数据。否则,捕获到的其它数据对自己也没有任何帮助。
(3) 使用捕获过滤器。通过设置捕获过滤器,可以避免产生过大的捕获数据。这样用户在分析数据时,也不会受其它数据干扰。而且,还可以为用户节约大量的时间。
(4)使用显示过滤器。通常使用捕获过滤器过滤后的数据,往往还是很复杂。为了使过滤的数据包再更细致,此时使用显示过滤器进行过滤。
(5)使用着色规则。通常使用显示过滤器过滤后的数据,都是有用的数据包。如果想更加突出的显示某个会话,可以使用着色规则高亮显示。
(6)构建图表。如果用户想要更明显的看出一个网络中数据的变化情况,使用图表的形式可以很方便的展现数据分布情况。
(7) 重组数据。当传输较大的图片或文件时,需要将信息分布在多个数据包中。这时候就需要使用重组数据的方法来抓取完整的数据。Wireshark的重组功能,可以重组一个会话中不同数据包的信息或者是重组一个完整的图片或文件。
三、wireshake面板
(1)packet list面板 (包列表)
(2)packet details面板(包细节)
(3)packet bytes面板 (包字节)
黑色背景代表报文的各类错误,红色背景代表各类异常情景,绿色则是成功的情景
数据包列表区中不同的协议可以使用不同的颜色区分。协议颜色标识定位在菜单栏视图(view)àcoloring rules,如下图
1.显示过滤器 (Display Filter)
用于设置过滤条件进行数据包列表过滤。
菜单路径:分析(Analyze) --> 显示过滤器(Display Filters)。
2.数据包列表
显示捕获到的数据包,每个数据包包含编号,时间戳,源地址,目标地址,协议,长度,以及数据包信息。 不同协议的数据包使用了不同的颜色区分显示。
3.数据包详细信息
在数据包列表中选择指定数据包,在数据包详细信息中会显示数据包的所有详细信息内容。数据包详细信息面板是最重要的,用来查看协议中的每一个字段。各行信息分别为:
(1)Frame: 物理层的数据帧概况
(2)Ethernet II: 数据链路层以太网帧头部信息
(3)Internet Protocol Version 4: 互联网层IP包头部信息
(4)Transmission Control Protocol: 传输层的数据段头部信息,此处是TCP
(5)Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议
见下表,更明白些
Wireshark过滤器设置
初学者使用wireshark时,将会得到大量的冗余数据包列表,以至于很难找到自己抓取的数据包部分。wireshark工具中自带了两种类型的过滤器,学会使用这两种过滤器会帮助我们在大量的数据中迅速找到我们需要的信息。
(1)抓包过滤器
捕获过滤器的菜单栏路径为捕获(Capture) -->捕获过滤器( Capture Filters)。用于在抓取数据包前设置
如何使用?可以在抓取数据包前设置如下:
捕获captureà选项interfacesà会弹出下面图片
ip.host== 60.207.246.216 and icmp表示只捕获主机IP为60.207.246.216的ICMP数据包
即可获取数据,结果如下:
(2)显示过滤器
显示过滤器是用于在抓取数据包后设置过滤条件进行过滤数据包。通常是在抓取数据包时设置条件相对宽泛,抓取的数据包内容较多时使用显示过滤器设置条件顾虑以方便分析。同样上述场景,在捕获时未设置捕获规则直接通过网卡进行抓取所有数据包,如下捕获captureà选项interfacesà会弹出下面图片
上述介绍了抓包过滤器和显示过滤器的基本使用方法。在组网不复杂或者流量不大情况下,使用显示器过滤器进行抓包后处理就可以满足我们使用。下面介绍一下两者间的语法以及它们的区别。
wireshark过滤器表达式的规则
抓包过滤器语法:protocol [.string1.string2....stringn] [comparison operator] [value]
ip.addr == 192.168.1.1
协议Protocol(ether、ip、tcp、udp、http、icmp、ftp等)
string:(addr、port、flags、flags.syn、len、host)
示例:
eth.addr == ff:ff:ff:ff:ff:ff(eth开头的,后边跟的地址是6字节,一般是mac地址)
tcp.port == 80
tcp.flags
tcp.flags.syn == 1
ip.len <= 60
ip.host == 192.168.1.104(如果想要写ip地址,那么前面以ip开头)
comparison operator:(比较运算符):(
eq(==)、ne(!=)、gt(>)、lt(<)、ge(>=)、le(<=)、contains(包含)、matches(~)、bitiwise_and(&))
示例:
ip.src == 10.0.0.5
ip.src != 10.0.0.5
frame.len > 10
frame.len < 128 #只查看长度小于128字节的数据包
frame.len ge 0x100
frame.len <= 0x20
udp contains 7c:7c:7d:7d #匹配payload中含有0x7c7c7d7d的UDP数据包,不一定是从第一字节匹配
http.host matches "ace\.(org|com|net)" #matches(匹配)和contains(包含某字符串)语法
tcp.flags & 0x02... #显示包含TCP标志的封包。
!= 注意事项 ( Wireshark Version 3.6.0 之前适用,3.6.0 之后已更新该过滤逻辑)
ip.addr == 1.2.3.4,显示所有包括 IP 地址 1.2.3.4 的数据包
ip.addr != 1.2.3.4,显示所有不包括 IP 地址 1.2.3.4 的数据包?语法错误!对于源或目的 IP 地址为 1.2.3.4 的包,该表达式也适用。因为 ip.addr != 1.2.3.4 表达式被理解为 “数据包包含一个名为ip.addr的字段,其值与 1.2.3.4” 。IP 数据包包含源和目的 IP 地址,当两个地址中至少有一个与 1.2.3.4 不同时,表达式的值将为 true 。
!(ip.addr == 1.2.3.4),显示所有不包括 I P地址 1.2.3.4 的数据包
value
无符号整数
可以为 8,16,24,32 或 64 bit 。十进制、八进制或十六进制表示整数。
示例:
ip.len le 1500
ip.len le 02734
ip.len le 0x5dc
协议过滤
比较简单,直接在Filter框中直接输入协议名即可。注意:协议名称需要输入小写。
tcp,只显示TCP协议的数据包列表
http,只查看HTTP协议的数据包列表
icmp,只显示ICMP协议的数据包列表
ip过滤
ip.src ==192.168.1.104 显示源地址为192.168.1.104的数据包列表
ip.dst==192.168.1.104, 显示目标地址为192.168.1.104的数据包列表
ip.addr == 192.168.1.104 显示源IP地址或目标IP地址为192.168.1.104的数据包列表
端口过滤
tcp.port == 80, 显示源主机或者目的主机端口为80的数据包列表。
tcp.srcport == 80, 只显示TCP协议的源主机端口为80的数据包列表。
tcp.dstport == 80,只显示TCP协议的目的主机端口为80的数据包列表。
Http模式过滤
http.request.method=="GET", 只显示HTTP请求是方法是 GET 的。
逻辑运算符&& 与、|| 或、!非 (and/or/not)
ip.host == 192.168.1.104 and tcp.dstport == 80 抓取主机地址为192.168.1.104、目的端口为80的数据包
ip.host == 192.168.1.104 || ip.host == 192.168.1.100 抓取主机为192.168.1.104或者192.168.1.100的数据包
过滤多个条件组合时,使用and/or。比如获取IP地址为192.168.1.104的ICMP数据包表达式为ip.addr == 192.168.1.104 and icmp
按照数据包内容过滤。假设我要以IMCP层中的内容进行过滤,可以单击选中界面中的码流,在下方进行选中数据。如下
右键单击选中后出现如下界面:
选中select后在过滤器中显示如下:
后面条件表达式就需要自己填写。如下我想过滤出data数据包中包含"a"内容的数据流。包含的关键词是contains 后面跟上内容。
看到这,基本上对wireshark有了初步了解。