nftables 如何匹配的 TCP 中存在 Payload 数据包? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SunBK201
V2EX    宽带症候群

nftables 如何匹配的 TCP 中存在 Payload 数据包?

  •  
  •   SunBK201 3 天前 1015 次点击

    nftables 貌似不支持 ip length - ip hdrlength * 4 - tcp doff * 4 > 0 这种算术操作。

    14 条回复    2025-12-12 09:44:23 +08:00
    birdvdsk
        1
    birdvdsk  
       3 天前 via Android
    你的具体需求是什么
    SunBK201
        2
    SunBK201  
    OP
       3 天前
    @birdvdsk 我需要使用 nftables 把包含 payload 的 TCP 数据包 hook 到用户态的 nfqueue 进行处理,之前的做法是对全部的 TCP 数据包进行 hook ,但是性能损耗太大,所以想要加一层过滤。
    birdvdsk
        3
    birdvdsk  
       3 天前 via Android   1
    可以利用 tcp 标志位,将 ACK ,PSH ,FIN 等可能携带数据的数据包使用 nftables 过滤。但是话说回来,经过 Linux 网络栈的情况下进行性能优化是比较困难的。
    luojiyin87
        4
    luojiyin87  
       3 天前   1
    语法要换成“比较 + 加法/移位”,不必写减法链式公式。

    nft add rule inet payload_queue pre ip protocol tcp \
    ip length > (ip hdrlength << 2) + (tcp doff << 2) \
    queue num 100 bypass
    SunBK201
        5
    SunBK201  
    OP
       3 天前
    @luojiyin87 似乎有语法错误? Error: syntax error, unexpected hdrlength, expecting ')'
    SunBK201
        6
    SunBK201  
    OP
       3 天前
    @birdvdsk 我也有想到,但是只用 flag 可能有漏报吧
    unused
        7
    unused  
       3 天前
    试着读一下 payload 呢
    @th,0,8 & 0 == 0
    unused
        8
    unused  
       3 天前   1
    th -> ih
    SunBK201
        9
    SunBK201  
    OP
       3 天前
    @unused 这个方法刚刚我也发现了,但是 ih 似乎需要比较新的 nftables 版本,旧版本不支持
    xqzr
        10
    xqzr  
       3 天前
    TCP 头,长度不固定。没有 @ih 应该不好匹配...
    这些规则,曾用于:将选项 MSS 替换为 NOP (相当于,删除 MSS )
    tcp flags syn @th,160,8 set 1 continue
    tcp flags syn @th,168,8 set 1 continue
    tcp flags syn @th,176,8 set 1 continue
    tcp flags syn @th,184,8 set 1
    JoeSmith
        11
    JoeSmith  
       3 天前
    试试 eBPF 呗
    ysc3839
        12
    ysc3839  
       3 天前 via Android
    直接用 DPDK 吧?
    v1
        13
    v1  
       3 天前
    eBPF 解万忧
    maybeonly
        14
    maybeonly  
       2 天前
    iptables 倒是有 -m bpf 可以做,不过 nft 说这个不优雅,不要了
    要么就上 ebpf 吧,或者 nfqueue/rawsocket 用户态实现
    顺便说。用命令行查看计数器这个操作也挺慢的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     762 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 20:27 PVG 04:27 LAX 12:27 JFK 15:27
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86