我如何使用BPF定位TCP数据包中的MSS值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我如何使用BPF定位TCP数据包中的MSS值相关的知识,希望对你有一定的参考价值。

我正在学习BPF,并将一些iptables规则转换为BPF字节码。我主要是使用nfbpf_compile应用程序来执行此操作,而不是尝试编写C或汇编程序。我很幸运,但是一条规则的语法在逃避我。

我想丢弃的同步标记集丢失了MSS值的数据包。在iptables中,MSS的目标是--tcp-option 2。我知道MSS在TCP选项中,该选项从TCP数据包的字节22开始,并且MSS是'种类'2。我可以使用BPF语法中的tcp[22:2]==$NUMBER来过滤MSS。但是,我想做的是目标SYN数据包,其中MSS完全丢失。我已经尝试过可以想到的所有“ null”变体,但是没有运气。

有人知道BPF语法中的iptables ! --tcp-option 2的等效性吗?

我尝试过的例子:

$ ./nfbpf_compile RAW 'tcp[22:2]==0x0' (I know this won't work..it's an example) 12,48 0 0 0,84 0 0 240,21 0 8 64,48 0 0 9,21 0 6 6,40 0 0 6,69 4 0 8191,177 0 0 0,72 0 0 22,21 0 1 0,6 0 0 65535,6 0 0 0 # iptables -I INPUT -m bpf --bytecode '12,48 0 0 0,84 0 0 240,21 0 8 64,48 0 0 9,21 0 6 6,40 0 0 6,69 4 0 8191,177 0 0 0,72 0 0 22,21 0 1 0,6 0 0 65535,6 0 0 0 ' -j DROP

我正在学习BPF,并将一些iptables规则转换为BPF字节码。我主要是使用nfbpf_compile应用程序来执行此操作,而不是尝试编写C或汇编程序。我有很多...
答案

TL; DR

以上是关于我如何使用BPF定位TCP数据包中的MSS值的主要内容,如果未能解决你的问题,请参考以下文章

设置tcp的mss值

TCP最大报文段长度MSS

为啥GRE隧道的TCP MSS也要设置1436

如何从 C# 中的 TCP 数据包中获取 Http 正文消息

TCP 、UDP包的最大长度是多少?

IP UDP TCP等最大长度