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
이제 패킷을 변경할 수 있지만 가변 길이 IP 헤더가 있는 패킷의 UDP 페이로드를 pedit
작성하는 방법을 찾지 못했습니다 .$d
도움을 주시면 감사하겠습니다.
답변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로 변경합니다(자연스럽게 유효하지 않은 것으로 간주하여 삭제).