nftables 貌似不支持 ip length - ip hdrlength * 4 - tcp doff * 4 > 0 这种算术操作。
nftables 貌似不支持 ip length - ip hdrlength * 4 - tcp doff * 4 > 0 这种算术操作。
|
birdvdskDec 11, 2025 via Android
1
你的具体需求是什么
|
|
2
@birdvdsk 我需要使用 nftables 把包含 payload 的 TCP 数据包 hook 到用户态的 nfqueue 进行处理,之前的做法是对全部的 TCP 数据包进行 hook ,但是性能损耗太大,所以想要加一层过滤。
|
|
3
可以利用 tcp 标志位,将 ACK ,PSH ,FIN 等可能携带数据的数据包使用 nftables 过滤。但是话说回来,经过 Linux 网络栈的情况下进行性能优化是比较困难的。
|
|
4
语法要换成“比较 + 加法/移位”,不必写减法链式公式。
nft add rule inet payload_queue pre ip protocol tcp \ ip length > (ip hdrlength << 2) + (tcp doff << 2) \ queue num 100 bypass |
|
5
@luojiyin87 似乎有语法错误? Error: syntax error, unexpected hdrlength, expecting ')'
|
|
8
th -> ih
|
|
xqzrDec 11, 2025
10
|
|
JoeSmithDec 11, 2025
11
试试 eBPF 呗
|
|
ysc3839Dec 11, 2025 via Android
12
直接用 DPDK 吧?
|
|
v1Dec 11, 2025
13
eBPF 解万忧
|
|
maybeonlyDec 12, 2025
14
iptables 倒是有 -m bpf 可以做,不过 nft 说这个不优雅,不要了
要么就上 ebpf 吧,或者 nfqueue/rawsocket 用户态实现 顺便说。用命令行查看计数器这个操作也挺慢的。 |