您的位置  > 互联网

如何打开捕获过滤器的IP层数据报进行一一对应

IP层数据报之间一一对应:

TCP数据报之间一一对应

表达

让我们简单介绍一下过滤器,它是分析数据包时最重要的技术之一。 一次嗅探到很多数据包。 如果想要高效地提取出想要的数据包或者分析某个数据包中某个字段的值,过滤是必不可少的。 过滤器分为捕获过滤器()和显示过滤器()。

捕获过滤器可以视为一级过滤,显示过滤可以视为二级过滤。

也就是说:首先定义数据报的特征(一级过滤)。 由于过滤后仍不满足要求,因此再次进行过滤(二次过滤)。 作者只是打个比方,可能并不严谨。

捕获过滤器表达式

捕获过滤器表达式在开始捕获数据包之前应用。 仅捕获满足条件的报文,不满足条件的报文不被记录。

捕获过滤表达式不像显示过滤表达式那样有明显的规则,但写法并不多,所以并不难; 而且除非所有捕获占用的磁盘空间太大,并且你很清楚过滤后的数据包是你的,否则一般不需要捕获过滤表达式而是显示过滤表达式。

如何打开捕获过滤器:

语法:

捕获过滤器示例

显示目标 TCP 端口 3128 的数据包

tcp dst port 3128

显示源IP地址为10.1.1.1的数据包

ip src host 10.1.1.1

显示目标或源 IP 地址为 10.1.2.3 的数据包

host 10.1.2.3

显示源为UDP或TCP且端口号在2000~2500范围内的报文

src portrange 2000-2500

显示除 icmp 之外的所有数据包

not icmp

显示源IP地址为10.7.2.12但目的地址不是10.200.0.0/16的报文

src host 10.7.2.12 and not dst net 10.200.0.0/16

显示源IP为10.4.1.12或源网络为10.6.0.0/16、目的TCP端口号在200到10000之间、目的网络为10.0.0.0/8的所有数据包

(src host 10.4.1.12 or scr net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8

捕获广播流量

broadcast

显示过滤表达式

显示过滤表达式用于捕获数据包后,显示所有捕获的数据包中符合条件的数据包,隐藏不满足条件的数据包。

显示过滤表达式可以在工具栏下方的“显示过滤”输入框中输入即可生效。

语法

显示过滤器示例

显示 SNMP 或 DNS 或 ICMP 数据包

snmp || dns || icmp

显示源或目标 IP 地址为 10.1.1.1 的数据包

ip.addr == 10.1.1.1

显示源不是 10.1.2.3 或目标不是 10.4.5.6 的数据包

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

显示源或目标 TCP 端口号为 25 的数据包

tcp.port == 25

显示目标 TCP 端口号为 25 的数据包

tcp.dstport == 25

显示包含 TCP 标志的数据包

tcp.flags

显示包含 TCP SYN 标志的数据包

tcp.flags.syn == 1

排除 arp 流量

!arp

文本管理流量(或 ftp)

tcp.port == 23 || tcp.port == 21

两种过滤器的区别

可以看出,这两种过滤器的用途和作用是有区别的:

捕获过滤器是数据通过的第一层过滤器。 它用于控制捕获的数据量,以避免生成过大的日志文件。 显示过滤器用于过滤捕获结果时,可以让我们快速准确地在日志文件中找到所需的记录。

在捕获数据包之前必须设置捕获过滤器。 如果捕获到的数据包不是我们想要的,我们需要重置捕获过滤器,重新捕获数据包。 显示过滤器的功能比捕获过滤器更强大。 可以重复设置表达式,对抓包结果进行重复过滤,无需重新抓包。

跟踪 TCP 流

分析TCP的三向握手

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

下图是TCP三路握手的流程图。

TCP乱序中TCP报文常见的红黑着色问题

TCP 有问题。

TCP乱序的判断是基于TCP数据包中的SEQ不是下一个期望接收的SEQ,则判断为乱序。 因此,当TCP乱序发生时,很有可能是TCP乱序或者丢包,导致接收端的seq不连续。

如下图所示,在第四个数据包中,客户端收到服务器的SYN ACK后,服务器再次发送SYN ACK,将此数据包标记为乱序。

如下图所示,第七包数据本来应该收到带有 seq 的 TCP 数据包,但是却收到了数据包。 该数据包应该延迟到达,因此它被标记为乱序。

如果抓包中出现大量乱序数据包,则说明网络中存在较大的TCP乱序或丢包现象。

TCP 不

前一个 TCP 段未被捕获。

当TCP连接建立时,SYN数据包中包含对方TCP报文段的最大长度,即MSS标志,通常为1460。如果发送的数据包比最大报文段长度长,就会被分片,并且会被丢弃。分片数据包将被标记为“TCP of a PDU”。 这些数据包分片具有相同的ack,并且每个分片的seq不同。

这些分片正常情况下应该是连续接收的,即前一个分片指示的下一个seq就是下一个接收到的分片的seq。 如果收到的下一个分片的 seq 与前一个分片不连续,则该分片将被标记为 TCP not。 如下图所示,一个ack为705的TCP报文被分成多个分片发送,其中一个长度为1408的分片尚未被捕获。

需要注意的是,如果前面的分片丢失了,有可能是它实际上在网络中丢失了,也可能是它到达较晚,也可能是它本身没有被捕获。

传输控制协议

TCP 错误重传。

当同一个数据包被捕获两次时,则判断网络中发生了重传。 同时捕获到了初传包的反馈ack,因此判断初传包实际上没有丢失,所以称为虚假重传。 基于判断机制,如果抓包点在客户端,则假重传通常是下行包,因为此时客户端收到服务器发来的下行包后发送反馈ack并被捕获,但它很有可能服务端没有收到这个反馈ack,RTO超时,触发服务端重传。 如下图所示,红色框中有两次虚假重传,绿色的两个是同一个数据包,粉色的两个是同一个数据包。

传输控制协议

TCP 重传。

当同一个数据包被捕获两次时,则确定发生了重传,并且不捕获初传数据包的反馈ack。 因此,重传被判定为有效并标记为TCP。 基于软件判断机制,如果抓包点在客户端,则TCP重传通常是上行包,因为此时客户端收不到服务器的反馈ack,无从得知是否是上行包。服务器已收到初传数据包。 RTO 超时后触发客户端重传。 此时有两种情况,即1)服务器收到了初传包,但是发送的反馈ack包丢失了,客户端没有收到; 2)服务器没有收到初传包,所以没有发送。 反馈确认。 对于第一种情况,如果抓包点在服务器上,那么客户端重发的数据包很可能会被标记为TCP。

如下图所示,红线的TCP数据包就是重传数据包。 数据包中添加重传原因,为TRO超时引起,初传数据包序列号为45,并给出当前RTO超时时间。

TCP 快速

TCP 快速重传。

TCP协议设置了快速重传机制,以避免过度的慢启动对传输速率的影响。 快速重传是通过接收 3 个或更多重复的 ack 反馈来触发的。 快速重传不需要等待RTO超时。 如下所示。

325数据包,客户端向服务器返回ack=,表示期望从服务器接收下一个带有seq=的数据包;

在326数据包中,服务器向客户端发送了seq=数据包,这与客户端的期望不一致。 因此,客户端重传了327数据包中的ack=数据包,并再次表示期望收到seq=数据包。 将重复的ack标记为TCP Dup ACK,并在#后面指定重传的次数。

328数据包,服务器向客户端发送了seq=的数据包,但仍然没有达到客户端的期望。 客户端在329数据包中再次重传ack=数据包。

330数据包,服务器收到3个重复的ack,触发快速重传,重传seq=的TCP片段。

TCP 重复 ACK

重复确认。

当网络出现紊乱或者丢包时,接收端收到的seq就会不连续。 此时接收端会回复发送端一个重复的ack,ack的值就是下一个期望收到的seq。 如果重复ack次数大于等于3次,就会触发快速重传。 如下所示,

315数据包,客户端向服务器发送ack=反馈,期望在下一个数据包中收到TCP数据包seq=。 但下一个收到的数据包是带有 seq= 的 TCP 数据包。 由于 seq 不连续,因此该数据包被标记为 TCP not。

317包,客户端重复发送ack=包给服务器,第一次重发,#后面带1。

318数据包,客户端收到seq=的TCP数据包。

319 个数据包,直到 seq= 为止的所有 TCP 数据包均已收到,因此客户端以 ack= 反馈进行响应。

传输控制协议

TCP 窗口更新。

当接收方的TCP发生变异时,接收方通过TCP消息告知对方当前的接收窗口大小。 如下图所示,TCP还携带反馈ack。 该ack序列号与之前反馈的ack序列号相同,但这不是重复的ack。

TCP 已确认

反馈ACK指向未知的TCP段。

这意味着ACK反馈是计算机上不存在的TCP数据包。 有可能这个包丢失了,但是对方上报的ack包被捕获了。 如下图所示,标记为ack的数据包返回ack=2721,看起来像是反馈了seq=1361的包,但实际上,这个ack也返回了seq=1的包。 由于未捕获到包 seq=1,因此将反馈 ack 标记为 ack 。 从下图中我们还可以看到,由于peer已经反馈了ack=2721,说明发起者发送的seq=1的数据包也已经被peer收到了,但是可能已经丢失了。

传输控制协议

TCP滑动窗口为0。

当发送方的数据包发送速率大于接收方的接收速率时,接收方的TCP将变得越来越小。 当接收方在反馈ack中携带的size=0时,TCP Zero将被标记。 此时发送端会暂停发送数据,直到收到接收端的size!=0标志。

TCP满

TCP 已满。

表示发送方发送的数据已经达到接受窗口的上限。 发送方暂停发送并等待新的接收窗口的通知。

如下图,客户端向服务器发送ack反馈,期望在下一个数据包中收到seq=,但是接收窗口只有960,服务器收到ack后发送了960字节的数据,即TCP满的。 注意len=1004是整个IP包的长度,需要减去IP头的44个字节,即960个字节。

TCP 复位

TCP 重置。

是TCP协议结束异常连接的一种方式,通过flog中的reset=1标记。 当正常挥手四次仍无法结束TCP连接时,一方可以通过发送携带复位标志的TCP报文来结束TCP连接。

如下图所示,发送方通过两个TCP流发送数据。 图中,接收方首先向发送方反馈TCP=0,让发送方暂停发送数据,然后发送TCP RST标记释放TCP连接。 推测是接收方程序突然崩溃,导致缓存数据无法清除,然后接收方系统发送TCP复位释放TCP连接。