提问人:Andreas 提问时间:10/6/2023 更新时间:10/8/2023 访问量:40
是否可以按相对序列号使用 tcpdump 过滤 pcap 文件?想要读取每个会话仅前 10MB 的 pcap 文件
is it possible to filter pcap files with tcpdump by relative sequence number ? want read pcap files of only first 10Mbyte per session
问:
我必须按每个会话的前 xxx 字节过滤 pcap 文件 - 使用序列号可能是它的方法 - 但前提是我可以过滤相对数字 - 例如。每个会话的前 10KB - 按 relSqNUmber < 10.000 过滤
tcpdump 确实会打印出相对序列号 - 但默认情况下,序列号过滤器似乎只接受绝对数字。
我尝试使用过滤器 tcpdump -r fileabc.pcap 'tcp[4:4] = 0' 或 'tcp[4:4] < 10000' 不起作用 - 输入绝对数字时 - fitler 确实有效
答:
是否可以按相对序列号使用 tcpdump 过滤 pcap 文件?
不。
tcpdump 中的过滤是使用 libpcap 中的过滤机制完成的。该过滤机制可以查看原始数据包数据,并据此做出决策。
但是,TCP 段的原始数据包数据中显示的是绝对序列号。相对序列号相对于该方向上的第一个序列号,必须通过从绝对序列号中减去第一个序列号来计算。
为此,执行过滤的程序必须保存它看到的所有 TCP 连接的两个方向的第一个序列号,确定特定 TCP 段属于哪个特定连接以及它所在的方向,查找适当的连接,并从绝对序列号中减去适当的第一个序列号,并对其进行测试。
libpcap 使用的过滤机制不支持保留任何此类持久性信息。如果它在进行实时捕获时使用较新的 Linux 内核中支持的 eBPF 机制,或者在从保存的捕获文件中读取时有自己的该机制实现,它可能会做到这一点,但我还没有检查过这是否可能。
此外,如果不捕获 TCP 连接的初始握手,则“相对序列号”将相对于捕获的每个方向上的第一个数据包,而不是相对于连接的开始,因为连接开始时的序列号将完全不可用。
要做到这一点,必须在 tcpdump 中实现一个单独的过滤机制。(在 Wireshark 中,这正是这样做的;Wireshark 中的“捕获过滤器”机制是 libpcap 捕获机制,而 Wireshark 中的“显示过滤器”是一个单独的机制,它使用 Wireshark 在剖析数据包时确定的值。
下一个:LSTM 模型没有改进
评论