一、简介
1、什么是wireshark
百度:
2、主要应用
帮助管理员解决网络问题
帮助安全工程师用来检测安全隐患
开发人员用来测试协议执行情况
用来学习网络协议
等等。
3、特性
跨平台支持windows/unix平台
在接口实时抓包
能详细显示包的详细协议信息
可以打开/保存捕捉的包
可以导入导出其他程序支持的包数据格式
可以通过多种方式过滤包
多种方式查找包
通过过滤以多种彩色显示包
创建多种统计分析。。。
4、多种网络接口
可以捕捉多种网络接口,甚至无线局域网接口
5、哪些事情不能做?
不能用作入侵检测系统,不会处理网络事务,仅是监视网络,不会发送网络包或做其他交互的事情,但可以做名称解析
二、使用wireshark
1、打开后看到的第一页面,这里就称为初始页面吧
2、怎么样开始抓包
通过捕获选项
上面的初始页面,有两个入口可以点击一个是在main工具栏,一个是中间位置的captrue options
点击captrue options图标》弹出网卡如多网卡指定抓包网卡》开始抓包
3、wireshark窗口的介绍
wireshark主要分为7个界面
主菜单
菜单页面包括file、edit、view、go、capture、analyze、statistics、help
main工具栏
一些快捷导航,比如capture,开始,停止等等
过滤器
指定需要捕获所需要的条件,比如源地址/目标地址
封包列表
已经捕获到的封包,有源地址/目标地址,端口;颜色的不同代表不同的
封包详情
显示封包中的各字段
16禁止数据
顾名思义
地址栏
地址栏及一些杂项
4、过滤条件
通过集中表达式规则进行过滤
1)protocols
比如tcp,ether,fddi,ip,arp,rarp,decnet,lat,sca,moprc,mopdl,tcp and udp
2)direction
src,dst,src and dst,src or dst(不指定就是双向)
3)host(新版,老版本没有host)
net,port,host,portrange
4)logical openrations逻辑运算
and,or,not(下面有官方实例)
5、过滤关系
1)组合表达式
Table 6.6. Display Filter Logical Operations
English | C-like | Description and example |
---|---|---|
and |
&& |
Logical AND. |
or |
|| |
Logical OR. |
xor |
^^ |
Logical XOR. |
not |
! |
Logical NOT. |
[…] |
See “Slice Operator” below. |
|
in |
See “Membership Operator” below. |
2)运算符号
参考官方https://www.wireshark.org/docs/wsug_html/#DispCompOps
Table 6.5. Display Filter comparison operators
English | C-like | Description and example |
---|---|---|
eq |
== |
Equal. |
ne |
!= |
Not equal. |
gt |
> |
Greater than. |
lt |
< |
Less than. |
ge |
>= |
Greater than or equal to. |
le |
<= |
Less than or equal to. |
contains |
Protocol, field or slice contains a value. |
|
matches |
~ |
Protocol or text field match Perl regualar expression. |
bitwise_and |
& |
Compare bit field value. |
6、常见过滤需求
1)、数据链路层
mac地址过滤
eth.addr==00:0c:29:1c:8b:39
eth.src==00:0c:29:1c:8b:39
eth.dst==00:0c:29:1c:8b:39
2)、网络层
ip地址过滤
ip.addr==192.168.216.51
ip.src==192.168.216.51
ip.dst==192.168.216.51
3)、传输层
tcp/udp
tcp.prot==80
tcp.dstport==80
tcp.srcport==80
4)、应用层
http.request.uri contains ".php"
5)、wireshark支持筛选的还有很多协议,这里不一一列举,请查看官方文档
udp、tcp、arp、icmp、smtp、pop、dns、ip、ssl、http、ftp、telnet、ssh、rdp、rip、ospf
6)、协议参数过滤
tcp.flags.syn==0x02 显示包含syn标志位的数据包
frame.len==119 整个数据包长度,从eth开始到最后
http.request.method=="get" 显示http请求中method值为get的包
7)、逻辑条件组合筛选
||
&&
!
组合条件“与”
ip.src==192.168.216.51&&ip.dst==192.168.216.52
组合条件“或”
ip.src==192.168.216.51||ip.src==192.168.216.52
组合条件“非”
!(ip.src==192.168.216.51)
三、新版本差异
新版和老版本是存在很多差异的如
1、示例1-mac
2、示例2-ip
3、示例3-tcp
4、示例4-http
四、分析tcp三次握手
1、三次握手简单图示
2、第一次握手
客户端请求建立连接,发送请求包,标志位SYN,序号为0
3、第二次握手
服务端返回确认,标志位SYN,ACK,设置初始序列号Y=0, X+1=0+1=1,这个就是acknowledgement number了(确认序号)
4、第三次握手
客户端收到服务器发来的确认号正确,客户端再次发送确认ACK,SYN标志位为0,ACK标志位是1,确认序号=y+1=0+1,发送序号位x+1=1,服务器收到确认序号值与ack=1连接建立成功,开始传输数据
五、四次挥手
四次挥手即tcp断开连接得时候会有四次挥手得过程
为什么需要四次挥手那?
因为tcp协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,并且是全双工模式,需要两边连接全部关闭,此tcp会话才算完全关闭,四次挥手使得tcp连接能够可靠的终止,还有timed_wait也使得连接终止后网络上残余的发送给该连接的数据被丢弃而不至于被新连接接收,这种方式也更安全
1、图示四次挥手
2、抓包示例挥手协议图示
3、第一次挥手
属性:
ACK+FIN:标志位
Seq=23:序列号
ACK=29:接收的序列号+SYN包,也就是确认的序号
第一次挥手,客户端给服务器发送tcp包,用来关闭客户端到服务器的数据传输,发送FIN ACK报文 seq=23 ack=29
4、第二次挥手
第二次挥手,服务器收到FIN,发回一个ACK,Seq=29,ack=23
5、第三次挥手
服务端关闭和客户端连接,发送一个FIN,seq=24,ack=29
6、第四次挥手
第四次挥手,客户端收到服务器发送的FIN后,发回ACK确认,确认序号加1,就是30,这里就完全断开连接了。