wireshark工具使用详解以及Tcp三次握手抓包解析

概述

今天学习了下抓包工作的使用,写个文档记录下笔记总结

Wireshark介绍

wireshark是非常流行的网络封包分析软件,可以截取各种网络封包,显示网络封包的详细信息。

wireshark用处:

        wireshark是捕获机器上的某一块网卡的网络包,当你的机器上有多块网卡的时候,你需要选择一个网卡。

为了安全考虑,wireshark只能查看封包,而不能修改封包的内容,或者发送封包。

Wireshark窗口介绍

 

 

Wireshark主要分为这几个界面

1 Display Filter(显示过滤器), 用于过滤

2 Packet List Pane(封包列表),显示捕获到的封包,有源地址和目标地址、端口号

3 Packet Details Pane(封包详细信息),显示封包中的字段

4 Dissector Pane(16进制数据)

5 Miscellanous(地址栏等其他)

 

wireshark两种过滤器

过滤器有:捕捉过滤器显示过滤器

常用的过滤表达式

1协议过滤

HTTPTCP、UDPrtsprtp等等

2 IP过滤

ip.src == 192.168.1. 100显示源地址为192.168.1.100

ip.dst == 192.168.1.200 显示目标地址为192.168.1.200

3 端口过滤

tcp.port == 80 端口80

tcp.srcport== 80 只显示tcp协议的源端口为80

udp.port eq 15000 udp端口15000

tcp.port >= 1 and tcp.port <= 80 过滤端口范围

4 HTTP模式过滤

http.request.method == “Get” 只显示端口范围

5逻辑运算符为 AND / OR ,&& / ||

 

捕捉过滤器(CaptureFilters)

   1.用于决定将什么样的信息记录在捕捉结果中

   2.捕捉过滤器在抓抱前进行设置,决定抓取怎样的数据

   3.捕捉过滤器仅支持协议过滤

 

捕捉过滤器: 捕捉前依据协议的相关信息进行过滤设置

捕捉过滤器语法


Protocol(协议):


可能值: ip、arprarptcp、udpsmtphttpftpdnsicmp

Direction(方向)

可能值: stc、dstsrc and dstsrc or dst

如果没有指明方向,则默认使用“src or dst”作为关键字

“host 10.2.2.2”与“src or dst host 10.2.2.2”等价

Host(s):

可能值 netporthost、portrange

Logical Operations(逻辑运算):

可能只 not、and、 or

显示过滤器(DisplayFilters)

   1.用于在捕捉结果中进行详细查找

   2.用于过滤抓包数据,方便stream的追踪和排查

   3.显示过滤器既支持协议过滤也支持内容过滤

 

 

显示过滤器:对捕捉到的数据包依据协议或包的内容进行过滤

协议过滤语法

 


例如:http.request.method == "POST" string1和string2是可选的。

依据协议过滤时,可直接通过协议来进行过滤,也能依据协议的属性值进行过滤。

按协议进行过滤:

snmp || dns || icmp 显示SNMP或DNS或ICMP封包。

按协议的属性值进行过滤:

ip.addr == 10.1.1.1 ip.src != 10.1.2.3 or ip.dst != 10.4.5.6

ip.src == 10.230.0.0/16 显示来自10.230网段的封包。

tcp.port == 25 显示来源或目的TCP端口号为25的封包。

tcp.dstport == 25 显示目的TCP端口号为25的封包。

http.request.method== "POST" 显示post请求方式的http封包。

http.host == "tracker.1ting.com" 显示请求的域名为tracker.1ting.com的http封包。

tcp.flags.syn == 0X02 显示包含TCP SYN标志的封包。

 

内容过滤语法

深度字符串匹配

tcp contains "http"

显示payload中包含"http"字符串的tcp封包。

http.request.uri contains "online"

显示请求的uri包含"online"的http封包。

特定偏移处值的过滤

tcp[20:3] == 47:45:54

 /* 16进制形式,tcp头部一般是20字节,

所以这个是对payload的前三个字节进行过滤 */

http.host[0:4] == "trac"

 

包长度过滤

udp.length == 26 

这个长度是指udp本身固定长度8加上udp下面那块数据包之和

tcp.len >= 7   

指的是ip数据包(tcp下面那块数据),不包括tcp本身

ip.len == 94 

除了以太网头固定长度14,其它都算是ip.len,即从ip本身到最后

frame.len == 119 

整个数据包长度,从eth开始到最后

过滤实例

mac过滤 IP过滤

Mac 过滤

eth.dst == A0:00:00:04:C5:84
eth.src eq A0:00:00:04:C5:84
eth.dst==A0:00:00:04:C5:84
eth.dst==A0-00-00-04-C5-84
IP过滤

ip.addr == 10.43.54.65
// 常用的研究两者间的通信
ip.addr== 192.168.8.54 || ip.addr== 112.80.248.74
ip.src == 10.43.54.65 or ip.dst == 10.43.54.65

tcp和udp过滤

tcp.port == 80
tcp.port eq 80 or udp.port eq 80
tcp.port eq 25 or icmp
tcp.port >= 1 and tcp.port <= 80
tcp.window_size == 0 && tcp.flags.reset != 1
udp.length == 26
tcp类型和内容:
tcp[13] & 0×00 = 0: No flags set (null scan)
tcp[13] & 0×01 = 1: FIN set and ACK not set
tcp[13] & 0×03 = 3: SYN set and FIN set
tcp[13] & 0×05 = 5: RST set and FIN set
tcp[13] & 0×06 = 6: SYN set and RST set
tcp[13] & 0×08 = 8: PSH set and ACK not set

 

http过滤示例

http.request.method == GET

http.request.method == POST

http.request.uri == /img/logo-edu.gif

http.host == party.syyx.com
http.response.code == 404
http.content_type contains "javascript"

http contains GET


http.request.method == "GET" && http contains "Host: "
http.request.method == "GET" && http contains "User-Agent: "
http.request.method == "POST" && http contains "Host: "
http.request.method == "POST" && http contains "User-Agent: "
http contains "HTTP/1.1 200 OK" && http contains "Content-Type: "
http contains "HTTP/1.0 200 OK" && http contains "Content-Type: "

 

以下内容摘抄自 http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html

封包列表(Packet List Pane)

封包列表的面板中显示: 编号、时间戳、源地址、目标地址、协议、长度、以及封包信息不同的协议用了不同的颜色显示可以自己修改这些显示的颜色规则, view->coloring Rules封标列表如下图所示

 

 

封包详细信息(Packet Details pane)

这个面板我们最重要的。 用来查看协议中的每一个字段各行信息如下

Frame: 物理层的数据帧概括

Ethernet ll : 数据链路层以太网帧头部信息

Internet Protocol Version 4 : 互联网IP包头部信息

Transmission Control protocol 传输T的数据头部信息,此处是TCP

Hypertext Transfer Protocol: 应用层的信息此处是HTTP协议

 

Wireshark对应的OSI七层模型


TCP包具体内容

从下图可以看到wireshark捕获到的TCP包中的每个字段。

  

实例分析TCP三次握手过程

 

TCP报文格式 

下面是TCP报文格式图


上图中有几个字段需要重点介绍下:

1、序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
2、确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效(Ack=Seq+1)。
3、标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
(A)URG:紧急指针(urgent pointer)有效。
(B)ACK:确认序号有效。
(C)PSH:接收方应该尽快将这个报文交给应用层。
(D)RST:重置连接。
(E)SYN:发起一个新连接。
(F)FIN:释放一个连接。
需要注意的是:
(A)不要将确认序号Ack与标志位中的ACK搞混了。
(B)确认方的Ack=发起方的Seq+1,两端配对。

三次握手过程为

 

这图我都看过很多遍了, 这次我们用wireshark实际分析下三次握手的过程。

打开wireshark, 打开浏览器输入 http://www.cnblogs.com/tankxiao

wireshark中输入http过滤, 然后选中GET /tankxiao HTTP/1.1的那条记录,右键然后点击"Follow TCP Stream",

这样做的目的是为了得到与浏览器打开网站相关的数据包,将得到如下图

 

图中可以看到wireshark截获到了三次握手的三个数据包。第四个包才是HTTP的, 这说明HTTP的确是使用TCP建立连接的

第一次握手数据包

客户端发送一个TCP,标志位为SYN,序列号为0, 代表客户端请求建立连接。 如下图

 

第二次握手的数据包

服务器发回确认包, 标志位为 SYN,ACK. 将确认序号(Acknowledgement Number)设置为客户的I S N1.0+1=1,如下图

 

第三次握手的数据包

客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN+1,如下图:

 

 

 


  • 14
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: TCP三次握手和四次挥手是TCP协议建立和关闭连接时所采用的步骤。 三次握手是在客户端和服务器之间建立TCP连接时的过程。首先,客户端向服务器发送一个请求连接的数据包,该数据包包含一个随机生成的序列号(SYN),表示客户端希望建立连接。服务器接收到该请求后,向客户端回复一个确认连接的数据包,该数据包包含其自己生成的一个随机序列号(SYN-ACK),表示服务器同意建立连接。最后,客户端再次向服务器发送一个确认连接的数据包,该数据包中包含服务器的序列号加一(ACK),表示客户端接受服务器的连接请求。这样,TCP连接就建立起来了。 四次挥手是在客户端和服务器关闭TCP连接时的过程。首先,客户端发送一个关闭连接的请求数据包(FIN),表示客户端想要关闭连接。服务器收到该请求后,向客户端回复一个确认关闭连接的数据包(ACK),但自己的数据可能没有发送完毕。服务器等到自己的数据发送完毕后,发送一个自己的关闭连接请求数据包(FIN),表示服务器也希望关闭连接。客户端收到服务器的请求后,回复一个确认关闭连接的数据包(ACK),然后等待一段时间,确保服务器收到了该数据包。最后,客户端和服务器都关闭连接,四次挥手过程完成。 通过Wireshark抓包分析TCP三次握手和四次挥手可以观察到每个数据包的源地址、目标地址、序列号、确认号等信息。可以通过Wireshark的过滤功能筛选出TCP协议相关的数据包进行分析。通过分析数据包的交互过程,可以确认连接建立和关闭的状态是否符合预期,并可以进一步分析网络延迟、丢包等问题。 综上所述,Wireshark抓包分析TCP三次握手和四次挥手可以帮助我们深入理解TCP连接的建立和关闭过程,以及发现网络故障的根源。 ### 回答2: TCP是一种常用的传输层协议,它通过进行三次握手来建立连接,并进行四次挥手来终止连接。 三次握手的过程如下: 1. 客户端发送一个SYN标志位的TCP报文段给服务器,表示请求建立连接; 2. 服务器收到请求后,回复一个带有SYN和ACK标志位的TCP报文段给客户端,表示同意建立连接; 3. 客户端收到服务器的回复后,再次发送一个带有ACK标志位的TCP报文段给服务器,表示连接建立成功。 四次挥手的过程如下: 1. 客户端发送一个FIN标志位的TCP报文段给服务器,表示希望断开连接; 2. 服务器收到请求后,回复一个带有ACK标志位的TCP报文段给客户端,表示确认收到断开请求; 3. 服务器完成数据的发送后,发送一个带有FIN标志位的TCP报文段给客户端,表示自己也要断开连接; 4. 客户端收到服务器的断开请求后,发送一个带有ACK标志位的TCP报文段给服务器,表示确认断开,并进入TIME_WAIT状态。 在三次握手的过程中,第一次握手是客户端发起的,第二次握手是服务器回复同意建立连接,第三次握手是客户端回复确认连接。这个过程是为了确保双方都同意建立连接,以保证数据传输的可靠性。 在四次挥手的过程中,首先客户端发送断开请求,服务器回复确认,然后服务器发送断开请求,客户端回复确认。这个过程是为了保证双方都断开连接,并确保数据完整性。 Wireshark是一款网络抓包分析工具使用Wireshark可以捕获网络数据包,并对数据包进行解析和分析。通过Wireshark,我们可以看到每个TCP报文段的具体内容,并对三次握手和四次挥手的过程进行详细分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值