是否可以使用 tcpdump 按相对序列号过滤 pcap 文件?每个会话只想读取前 10Mbyte 的 pcap 文件

问题描述 投票:0回答:1

我必须按每个会话的前 xxx 字节过滤 pcap 文件 - 使用序列号可能是它的方法 - 但前提是我可以过滤相对数字 - 例如。每个会话的前 10KB - 按 relSqNUMBER 过滤 < 10.000

tcpdump 确实打印出相对序列号 - 但默认情况下序列号过滤器似乎只接受绝对数字。

我尝试使用过滤器 tcpdump -r fileabc.pcap 'tcp[4:4] = 0' 或 'tcp[4:4] < 10000' which did not work - when entering the absolute number - fitler did work

filter sequence packet tcpdump
1个回答
0
投票

是否可以使用 tcpdump 按相对序列号过滤 pcap 文件?

没有。

tcpdump中的过滤是通过libpcap中的过滤机制来完成的。该过滤机制可以查看原始数据包数据并据此做出决策。

然而,TCP 报文段的原始数据包数据中出现的是绝对序列号。 相对序列号是相对于该方向上的第一个序列号,并且必须通过从绝对序列号中减去第一个序列号来计算

为此,执行过滤的程序必须保存它看到的所有 TCP 连接的两个方向的第一个序列号,确定特定 TCP 段属于哪个特定连接以及它所在的方向,查找适当的连接,并从绝对序列号中减去适当的第一个序列号,并对that进行测试。

libpcap 使用的过滤机制不支持保留任何此类持久信息。 如果在进行实时捕获时使用较新的 Linux 内核中支持的 eBPF 机制,或者在从保存的捕获文件读取时拥有该机制自己的实现,那么它可能能够做到这一点,但是我还没有检查过这是否可行。

此外,如果不捕获 TCP 连接的初始握手,“相对序列号”将相对于每个方向上捕获的第一个数据包,而不是相对于连接的开始,因为连接开始时的序列号将完全不可用。 必须在 tcpdump 中实现单独的过滤机制才能做到这一点。 (在 Wireshark 中,这正是所做的;Wireshark 中的“捕获过滤器”机制是 libpcap 捕获机制,而 Wireshark 中的“显示过滤器”是一种单独的机制,它使用 Wireshark 在解析数据包时确定的值。)

© www.soinside.com 2019 - 2024. All rights reserved.