WireShark安装,安装非常简单,处理安装路径自定义之外,其他都直接点下一步。
点击菜单的“捕获-选项”,设置需要捕获的网络适配器,点击“开始”。也可以在菜单“捕获-开始”、“捕获-结束”来控制开始结束。在“捕获-捕获过滤器”编辑捕获表达式:
在上述“捕获”菜单中进行的操作,也可以在工具栏进行,如下图:
1号窗口展示的是wireshark捕获到的所有数据包的列表。注意最后一列Info列是wireshark组织的说明列,并不一定是该数据包中的原始内容。
2号窗口是1号窗口中选定的数据包的分协议层展示。底色为红色的是因为wireshark开启校验和验证而该层协议校验和又不正确所致。
3号窗口是1号窗口中选定的数据包的源数据,其中左侧是十六进制表示,右侧是ASCII码表示。另外在2号窗口中选中某层或某字段,3号窗口对应位置也会被高亮。
(1)点击每一行时,wireshark很智能的在记录前用标线表明了本次会话的记录范围[从三次握手到四次挥手]
(2)http请求是“请求->响应”式的,需要查看对应请求的响应时,可以在包上右键,选择“追踪流(Follow TCP Stream)”
(3)被认为最难的其实还是2号窗口展开后的内容不懂怎么看,以IP层为例:每一行就对应该层协议的一个字段;中括号行是前一字段的说明。冒号前的英文是协议字段的名称;冒号后是该数据包中该协议字段的值。
数据包的大致结构:
- 第一行:数据包整体概述,
- 第二行:链路层详细信息,主要的是双方的mac地址
- 第三行:网络层详细信息,主要的是双方的IP地址
- 第四行:传输层的详细信息,主要的是双方的端口号。
(4)tcp数据包结构及在wireshark中的位置:
在菜单“视图-着色规则”下查看:
WireShark有两种过滤器:捕捉过滤器(用于决定将什么样的信息记录在捕捉结果中)和 显示过滤器(用于在捕捉结果中进行详细查找);两者的区别:捕捉过滤器在抓包前进行设置,决定抓取怎样的数据;显示过滤器用于过滤抓包数据,方便stream的追踪和排查。捕捉过滤器仅支持协议过滤,显示过滤器既支持协议过滤也支持内容过滤。两种过滤器它们支持的过滤语法并不一样。
捕捉过滤器表达式作用是在wireshark开始捕获数据包之前,只捕获符合条件的数据包,不记录不符合条件的数据包。
也可以通过下面的步骤进入捕捉过滤器进行添加或者删减相应的过滤器:
(1)协议过滤语法:
语法: | 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 |
捕捉IP为10.4.1.12或者源IP位于网络10.6.0.0/16,目的IP的TCP端口号在200至10000之间,并且目的IP位于网络 10.0.0.0/8内的所有封包。
(2)字段详解:
Protocol(协议):
可能值: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp.
如果没指明协议类型,则默认为捕捉所有支持的协议。
注:在wireshark的HELP-Manual Pages-Wireshark Filter中查到其支持的协议。
Direction(方向):
可能值: src, dst, src and dst, src or dst
如果没指明方向,则默认使用 “src or dst” 作为关键字。
”host 10.2.2.2″与”src or dst host 10.2.2.2″等价。
Host(s):
可能值: net, port, host, portrange.
默认使用”host”关键字,”src 10.1.1.1″与”src host 10.1.1.1″等价。
Logical Operations(逻辑运算):
可能值:not, and, or.
否(“not”)具有最高的优先级。或(“or”)和与(“and”)具有相同的优先级,运算时从左至右进行。
“not tcp port 3128 and tcp port 23″与”(not tcp port 3128) and tcp port 23″等价。
“not tcp port 3128 and tcp port 23″与”not (tcp port 3128 and tcp port 23)”不等价。
显示过滤器作用在wireshark捕获数据包之后,依据显示过滤器表达式,对捕捉到的数据包依据协议或包的内容进行过滤,从已捕获的所有数据包中显示出符合条件的数据包,隐藏不符合条件的数据包。
显示过滤表达示在工具栏下方的“显示过滤器”输入框输入即可生效
一条基本的表达式由过滤项、过滤关系、过滤值三项组成。
比如ip.addr == 192.168.1.1,这条表达式中ip.addr是过滤项、==是过滤关系,192.168.1.1是过滤值(整条表达示的意思是找出所有ip协议中源或目标ip、等于、192.168.1.1的数据包)
(1)过滤项:
wireshark的过滤项是“协议“+”.“+”协议字段”的模式。以端口为例,端口出现于tcp协议中所以有端口这个过滤项且其写法就是tcp.port。推广到其他协议,如eth、ip、udp、http、telnet、ftp、icmp、snmp等等其他协议都是这么个书写思路。
当然wireshark出于缩减长度的原因,有些字段没有使用协议规定的名称而是使用简写(比如Destination Port在wireshark中写为dstport),又出于简便使用增加了一些协议中没有的字段(比如TCP协议只有源端口和目标端口字段,为了简便使用,wireshark增加了tcp.port字段来同时代表这两个)。
(2)过滤关系:
过滤关系就是大于、小于、等于等几种等式关系。注意其中有“English”和“C-like”两个字段,这个意思是说“English”和“C-like”这两种写法在wireshark中是等价的、都是可用的。
(3)过滤值:
过滤值就是设定的过滤项应该满足过滤关系的标准,比如500、5000、50000等等。过滤值的写法一般已经被过滤项和过滤关系设定好了,只是填下自己的期望值就可以了。
所谓复合过滤表达示,就是指由多条基本过滤表达式组合而成的表达示。基本过滤表达式的写法还是不变的,复合过滤表达示多出来的东西就只是基本过滤表达示的“连接词”:
(1)数据链路层:
筛选mac地址为04:f9:38:ad:13:26的数据包----eth.src == 04:f9:38:ad:13:26
筛选源mac地址为04:f9:38:ad:13:26的数据包----eth.src == 04:f9:38:ad:13:26
(2)网络层:
筛选ip地址为192.168.1.1的数据包----ip.addr == 192.168.1.1
筛选192.168.1.0网段的数据---- ip contains "192.168.1"
筛选192.168.1.1和192.168.1.2之间的数据包----ip.addr == 192.168.1.1 && ip.addr == 192.168.1.2
筛选从192.168.1.1到192.168.1.2的数据包----ip.src == 192.168.1.1 && ip.dst == 192.168.1.2
(3)传输层:
筛选tcp协议的数据包----tcp
筛选除tcp协议以外的数据包----!tcp
筛选端口为80的数据包----tcp.port == 80
筛选12345端口和80端口之间的数据包----tcp.port == 12345 && tcp.port == 80
筛选从12345端口到80端口的数据包----tcp.srcport == 12345 && tcp.dstport == 80
(4)应用层:
特别说明----http中http.request表示请求头中的第一行(如GET index.jsp HTTP/1.1),http.response表示响应头中的第一行(如HTTP/1.1 200 OK),其他头部都用http.header_name形式。
筛选url中包含.php的http数据包----http.request.uri contains ".php"
筛选内容包含username的http数据包----http contains "username"
显示post请求方式的http封包---http.request.method== "POST"
显示请求的域名为tracker.1ting.com的http封包---http.host == "tracker.1ting.com"