tc를 사용하여 패킷 페이로드 변경

tc를 사용하여 패킷 페이로드 변경

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/40을 지정하며 이는 본질적으로 0x40000000/0xf0000000모든 IPv4 패킷과 일치함을 의미합니다. 그런 다음 버전 번호를 1로 변경합니다(자연스럽게 유효하지 않은 것으로 간주하여 삭제).

관련 정보