0

C ++または任意の言語を使用して、オペレーティングシステムのカーネルが受信する前に、ネットワークカードを介して特定のアドレスからインターネットから送信されるデータを制御する方法はありますか?

言い換えると、C++を使用してOSI7層モデルにアクセスし、7層の任意の層を通過するデータを制御する方法はありますか、それとも論理的に実装されていますか。

それらが論理的に実装されておらず、アクセスできる場合は、特定のアドレスから受信した物理層を通過するパッケージにアクセスし、次の層に移動する前に何らかの操作を実行したいと思います。

また、OSI用のシミュレーションソフトウェアはありますか?

4

3 に答える 3

4

デバイスドライバーはハードウェアとカーネルの間にあるため、これが唯一の選択肢です。OSによって異なりますが、主要なものすべてに対してC++でデバイスドライバーを作成できます。ただし、プレーンなCインターフェイスに遭遇する準備をしてください。

于 2009-12-22T00:39:34.420 に答える
2

信頼できないアプリケーションが、オペレーティングシステムがネットワークから来るものを制御できるかどうかを尋ねていますか?

答えは明白なはずです。

ほとんどのオペレーティングシステムは、ネットワークから送信される生データにアクセスするためのインターフェイスを提供します。ネットワークカードとオペレーティングシステムの間に自分自身をくさびで留めようとするのではなく、それらを使用する必要があります。

また、C ++!= C#です。程遠い。

于 2009-12-22T00:38:17.223 に答える
2

winsockスタックに自分自身を挿入することでデータをインターセプトできるレイヤードサービスプロバイダーを作成することも考えられますが、これによって、WindowsのカーネルとNDISレイヤーを通過するデータが短絡することはありません。ここでの唯一の実際の解決策は、デバイスドライバーです。また、ハードウェアに独自のTCP / IPスタックを実装するネットワークカードがいくつかあり、それらと直接通信できますが、これらはあまり一般的ではありません。これらのアプローチはどれも簡単ではなく、多くのカーネルモードCを検討しています。それに慣れていない場合は、これを試してはいけません。

また、winpcapの使用を検討することもできます。これにより、必要な多くの機能が提供されます。 http://www.winpcap.org/devel.htm

于 2009-12-22T00:44:09.960 に答える