[解決済み] 未知の拡張子を含むIPv6拡張ヘッダのパース
質問
私は非常に単純なネットフィルターを書いていて、ICMPv6 タイプ、TCP/UDP ポート番号などのようなものに一致するように IPv6 ヘッダーを解析したいところに到達しています。
そこで、私は IPv6 パケットの形式 を深く読んでいるのですが、なんだか...その...。何度も何度も読み返して、自分が本当に正しく読んでいるのか確認したようなものです。 40バイトの固定ヘッダーから始めて、その次のヘッダーフィールドを見なければならないようです。そして、次のヘッダの次のヘッダフィールドを見るというように、リンクリストのように最後まで見なければならないのです。もしペイロードがあれば、それは後に続きます。
問題は、固定ヘッダにも拡張ヘッダにも長さのフィールドがないことです。このリンクリストを最後まで追いかけることができるように、拡張ヘッダーの種類とそのサイズのテーブルを用意しなければなりません。
これは奇妙な、おそらくは無謀な設計だと思います。認識できない拡張ヘッダー タイプに遭遇した場合はどうすればよいでしょうか。どうしたらよいでしょうか。私はその長さを知りません。ネットフィルタがパケットを許可すると、攻撃者が偽のヘッダタイプを含めることによってネットフィルタを回避することを許してしまうので、私はパケットを投げ出してブロックしなければならないのでしょう。 しかし、それは、プロトコルが拡張された場合、新しい拡張を使用するために、これまでに書かれた IPv6 ヘッダー解析ソフトウェアのひとつひとつが同時に更新されなければならないことを意味します。
では、使用している拡張子を知らない場合、どのようにIPv6ヘッダーを解析すればよいのでしょうか。その長さを知らないので、未知の拡張子のヘッダーをスキップするにはどうしたらよいでしょうか?
どのように解決するのですか?
解析できないものに遭遇した場合、すでに解析したものをもとに判断したり、行動を起こしたりしなければなりません。
IPv6 では、各拡張ヘッダーがパケットの残りの部分を "ラップ"するので、デザインはそのようになります。ルーティング ヘッダー、聞いたことのないヘッダー、ペイロードの順に表示された場合、ペイロードを解析することはできません。ペイロードの意味は、原則的に、解釈する方法がわからないヘッダーに依存します。
ルーターはそのようなパケットをルーティングすることができますが、それは彼らが必要とするのはルーティングヘッダだけだからです。ディープ パケット インスペクション ガジェットなどは多くのことを知る必要がありますが、それはいずれにせよ彼らの宿命です。
追加で編集しました。この設計は、ミドルボックスは自分が知っていることだけを変更できることを意味します。もしミドルボックスが知らないヘッダーを見つけたら、2 つのオプションしかありません。拒否するか、パスするかです。IPv4では、未知の拡張を削除し、残りを渡すこともできます。IMO では、この特性により、設計が拡張可能でなくなるのではなく、むしろ拡張可能になります。
関連
-
[解決済み] SNMPのpingとは何ですか?
-
[解決済み] パイプとソケットの違いは何ですか?
-
[解決済み] カーネルソースプロジェクトのinclude/uapiに含まれるもの
-
[解決済み] pingレスポンス "Request timed out." vs "Destination Host unreachable" (リクエストがタイムアウトしました)。
-
[解決済み] localhost:8080とはどういう意味ですか? [クローズド]です。
-
[解決済み] ホストDNSサーバを使用したDocker-composeコンテナ
-
[解決済み] TCP/IPのリセット(RST)フラグが送信される原因は何ですか?
-
[解決済み】接続タイムアウトエラーを人為的に発生させる
-
[解決済み】遅いネットワーク接続をシミュレートするネットワークツール【終了しました
-
[解決済み】UDP vs TCP、どれくらい速いのか?[クローズド]
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] オクテット・ストリングス それは何ですか?
-
[解決済み] SNMPのpingとは何ですか?
-
[解決済み] カーネルソースプロジェクトのinclude/uapiに含まれるもの
-
[解決済み] localhost:8080とはどういう意味ですか? [クローズド]です。
-
[解決済み] ホストDNSサーバを使用したDocker-composeコンテナ
-
[解決済み] RPCサーバーが使用できません。(HRESULT: 0x800706BA による例外)。
-
[解決済み】接続タイムアウトエラーを人為的に発生させる
-
[解決済み】ローカルネットワーク内のすべての有効なIPアドレスのリストを取得する方法は?[クローズド]
-
[解決済み】インターネット上で最大の安全なUDPパケットサイズとは?
-
[解決済み] 内部アプリケーションに最適なTCPポート番号の範囲【終了しました