使用 tc 更改数据包有效负载

使用 tc 更改数据包有效负载

如何使用 tc 来匹配入口数据包的特定有效负载,例如,如果 IP/UDP 数据包的前 32 位有效负载等于某个常数$c,则该值$c应更改为$d?这对于可变长度 IP 标头尤其有效。

看起来u32过滤器应该能够执行匹配。以下尝试是否正确?我不太确定nexthdr具体的部分。

tc filter add dev protocol ip parent ffff: u32 match $c 0xffffffff at nexthdr+8

现在pedit可以用来更改数据包,但我没有找到一种方法来写入$d具有可变长度 IP 标头的数据包的 UDP 有效负载。

任何帮助表示赞赏。

答案1

看起来我们可以使用IP地址表示法,即使事情实际上与IP地址无关。例如,这有效:

tc filter add dev eth0 parent 1: u32 match ip src 64.0.0.0/4 at 0 action pedit pedit munge offset 0 u8 set 0x10 retain 0xf0 continue

这指定源地址64.0.0.0/4为 0,这实际上意味着0x40000000/0xf0000000匹配任何 IPv4 数据包。然后它将版本号更改为1(自然将其视为无效而丢弃)。

相关内容