UDP 페이로드 끝에 있는 2바이트 4를 일치시키고 0x001c와 비교하여 확인해야 합니다. UDP 페이로드에 가변 길이가 없다면 이는 쉬울 것입니다. UDP 페이로드의 길이를 얻고 페이로드의 끝을 기준으로 바이트로 이동하려면 어떻게 해야 합니까?
iptables -t raw -A OUTPUT -p udp --dport 53 -m u32 --u32 "$foo" -j AAAA
$foo
나가는 AAAA 쿼리와 일치하고 iptables 대상으로 이동하기 위해 무엇을 입력해야 하는지 알고 싶습니다 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에 대해 더 자세히 설명합니다.또 다른 대답.