使用 iptables u32 模块匹配 AAAA 记录

使用 iptables u32 模块匹配 AAAA 记录

我需要匹配 UDP 负载末尾的两个字节 4,并根据 0x001c 检查它们。如果 UDP 有效负载没有可变长度,这将很容易。如何获取 UDP 有效负载的长度并跳转到相对于有效负载 END 的字节?

iptables -t raw -A OUTPUT -p udp --dport 53 -m u32 --u32 "$foo" -j AAAA

我想知道要输入什么内容,$foo以便它匹配传出的 AAAA 查询并跳转到 iptables target AAAA

答案1

我认为这不是xt_u32适合这项工作的工具。您可以使用以下命令更轻松地完成此操作xt_bpf

iptables -t raw -A OUTPUT -p udp --dport 53 -m bpf --bytecode "7,128 0 0 0,20 0 0 4,7 0 0 0,72 0 0 0,21 0 1 28,6 0 0 65535,6 0 0 0" -j AAAA

字节码来自以下 BPF 程序集:

        ld #len            ; get the total length of the packet
        sub #4             ; subtract 4 to get the offset of the Type code
        tax                ; transfer the contents of register A to register X
        ldh [x + 0]        ; load the Type code (a half-word) into register A
        jneq #0x001c, fail ; check if Type == AAAA
        ret #65535         ; return success (match)
fail:   ret #0             ; return failure (no match)

我在中解释了有关 BPF 的更多信息另一个答案

相关内容