2016-06-24 5 views
0

私の修士論文を書いていますが、実装には少し問題があります。ネットワークスタックにネットワークパケットを再投入する(RAWソケット)

論文の一部は、PC Aのネットワークパケットを暗号化してPC Bに送信することです。受信者はこれを解読してネットワークスタックに再注入し、他のアプリケーションがパッケージで動作できるようにします。

最初のテストケースでは、ICMP(リクエスト)を使用しました。 Nftableは、システムAのトラフィックをフィルタリングして送信するパッケージです。一致する出力パッケージがある場合、私はそれをユーザ空間にnftでキューイングします。私のC-Applicationはそれを暗号化し、生のソケットで送信します。パッケージはPC Bから受信されます。 PC Bでは、Rawソケットに基づくフィルタアプリケーションがあります。このアプリケーションは、受信フレームを見て、それを解読します。私がwiresharkで結果をチェックすると、すべてがうまくいくようです。復号されたフレームの各ビットは元のフレームのビットに等しい。今度は、復号されたパケットをネットワークスタックに再注入する必要があります。前に述べたように、これはRAW-Socketsによって行われます。 この再注入パッケージは、通常のICMP-Requestパケットのように処理する必要があります。しかし、そうではありません。システムは復号されたパッケージを受信しますが、応答は送信されません。

何が起こっているのでしょうか? rawソケットを持つパケットを自分のネットワークスタックに注入することは可能ですか?

最後の日にTUN/TAPについて読みました。これは私のパッケージを再投入する正しい方法でしょうか?

ありがとうございました!

敬具、 アンドレアス

答えて

0

私はそれが動作するようになりました。

私はここで解決策を見つけた:私の最初の試みでHow to inject a raw L2 packet as an incoming packet to an interface on Linux?

を、このスレッドを見つけた私はhaventは答えを検索します。しかし、今は正常に動作します!

解決策は非常に簡単です。私は物理インターフェイスeth0にブリッジを介して接続された仮想インターフェイスが必要です。そこで私はスタックに再投入したいパケットを仮想インターフェイスに送ります。ブリッジ上ではeth0に転送され、フレームとして処理されます。

種類: アンドレアス

関連する問題