パケットデータがインターフェイスに到達する前と受信された後に傍受することは可能ですか?たとえば、前処理して再送しますか?
次のカスタムソリューションを作成したいと思います。この素晴らしいプログラムはvtunと呼ばれています。インターフェイスとして機能する仮想デバイスを作成します。これにより、トラフィック圧縮、暗号化、シェーピングなど、さまざまなタスクを実行できます。
もう少し簡単にできないかと思います(vtunはかなり古いですね…)。私のターゲットオペレーティングシステムはUbuntu 14.04です。
ベストアンサー1
はい、LinuxカーネルのNetfilterフレームワークはそれを可能にするのに十分柔軟です。
君の期待がどうだったのか分からない「カスタムソリューション」そして「もう少し簡単にできれば」。私はあなたが低レベルのパケット処理を実行するコードを書くと仮定します。
一般的なアイデアは次のとおりです。
iptables
目的のテーブル(filter
、、、 )のトラフィックをnat
ターゲットmangle
を介してユーザースペースに転送するルールを作成しますQUEUE
。- 次のコマンドを使用して、キューに送信されたパケットにアクセスできます。libnetfilter_queue図書館nfqueueバインディング(PerlまたはPythonを使用している場合)
- 適切であると判断されたようにパケットを処理し、元に戻します。
処理するトラフィックの種類に応じて、生のIPパケット、TCPフラグメント、またはUDPデータグラムを使用し、トラフィックを正しく再組み立てし、パケットレベルのチェックサムの正確性およびその他すべての項目を維持することはあなたの責任です。オペレーティングシステムのTCP / IPスタックは後ろから魔法のように扱います。
Pythonで作業する予定の場合は、次のことをお勧めします。DPKTまたはオームパケットまたはTCPセグメントを処理します。これにより、仕事がはるかに簡単になります。