1

NdisRegisterProtocol()はプロトコル ドライバーを登録し、構造体を使用_NDIS_OPEN_BLOCK_NDIS_PROTOCOL_BLOCKて成功をフックReceivePacketHandlerし、NDIS の代わりに MyRecivePacket() を使用して、Web サイトを開いたときにパケット関数を受信しMyRecievePacket()ます。

私の質問は:www.stackoverflow.comを使用して Web サイト ( など) を開くときIE、 をフックしSendPacketsHandlerてこのパケットを取得し、URLwww.stackoverflow.com文字列を取得するにはどうすればよいですか。つまり、カーネル モードで URL をキャプチャする方法です。ありがとう

4

3 に答える 3

0

転送されたパケットをそのアプリケーション層に豊富に解凍するために使用されるディープパケットインスペクション(DPI)と呼ばれるツールと手法があり、カーネルランドでもパケットコンテンツを追跡するために使用できるopenDPIのようなライブラリがあります。

アプリケーション層までのネットワークパケットを解凍できる場合は、その内容を変更できます。NICをスローする各パケットをキャプチャして解凍するのは簡単ではないという賞を受賞する必要があります。

于 2012-11-27T15:44:21.397 に答える
0

まず第一に、私はあなたが何をしたいのか本当に明確ではありません.私の主な疑問:

  • プロトコル ドライバーを登録していますか、それともReceivePacketHandler既存のドライバーをフックしていますか? それは本当に違うものです。

あなたのターゲットは、既存のプロトコル ドライバーをフックするのではなく、単に URL をインターセプトすることであると想定します。@icepack がコメントしているように、procol ドライバーを使用するのは「簡単な方法」ではありません。なぜなら、すべての TCP 接続を追跡して HTTP のものを抽出する必要があるからです。

ただし、NDIS の使用が必須の場合は、DDK の PassThru の例 [1] または NDIS フィルター ドライバー [2] の例を確認し、TCP プロトコルと HTTP ヘッダーを解析するために必要なロジックを実装する必要があります。

NDIS が必須ではない場合、TDI (非推奨ですが機能的には [3]) や WFP ドライバー [4] を使用して、TCP スタックよりも高いレベルで通信を傍受するなどの簡単な手法があります。

[1] http://code.msdn.microsoft.com/windowshardware/NDISLWFSYS-Sample-NDIS-60-42b76875

[2] http://msdn.microsoft.com/en-us/library/windows/hardware/ff565501(v=vs.85).aspx

[3] http://technet.microsoft.com/en-us/library/cc939977.aspx

[4] http://msdn.microsoft.com/en-us/library/windows/hardware/gg463267.aspx

于 2012-11-28T09:00:17.457 に答える
0

これは通常行うべきことではありません。URLデータはネットワーク スタックのアプリケーション層に属し、カーネル空間に存在する下位層からアクセスされるべきではありません。Windows ネットワーク アーキテクチャ内のプロトコル ドライバー レイヤリングの詳細については、http: //msdn.microsoft.com/en-us/library/windows/hardware/ff571073 (v=vs.85).aspx を参照してください。

ただし、プロトコル ドライバに到達する途中でパケットに追加されたヘッダーを削除することで可能になる場合があります。これは、その上にある 、 などのプロトコルHTTPによって行われます。プロトコル ドライバに向かう途中のデータ パケット。ヘッダーは段階的に追加されます。下層のレイヤーごとに、上のレイヤーからの入力はデータの不透明なブロック (上のレイヤーのデータとヘッダーで構成されます) です。たとえば、パケットが純粋なデータとして開始され、開始時にヘッダーが追加され、その後にヘッダーが追加され、その後にヘッダーが追加される場合があります。元のデータを復元するには、逆の順序でヘッダーを削除する必要があります。TCPIPHTTPTCPIP

これは、途中でプロトコルがデータを変更する可能性があるため、常に可能であるとは限らないことに注意してください。この場合、逆の操作 (復号化など) を行っても元のデータを抽出することはできません。

于 2012-11-27T15:20:15.667 に答える