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に変更します(自然に無効と見なして削除)。