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/0xf0000000IPv4パケットと一致することを意味します。次に、バージョン番号を1に変更します(自然に無効と見なして削除)。

関連情報