0

独自のユーザーモードNATアプリケーションを作成したいと思います。

私は次のスキームを持っています:

VM2[192.168。8.2 ]------[192.168。8.1 ]Win2003[192.168。9.1 ]------[192.168。9.2 ] VM1

VM3[192.168。8.3 ] _ /

VM4[192.168。8.4 ] _ /

  1. 8.1および9.1インターフェイスでRAWIPパケットをキャプチャしています。
  2. 8.1からの一部のパケットは、次の方法で9.1インターフェイスに転送されます。8.2->9.2は9.1->9.2に置き換えられます
  3. 9.1からの一部のパケットは次の方法で8.1インターフェースに転送されます:9.2->9.1は9.2->8.2に置き換えられます

私のアプリケーションはポートをまったくバインドしていません-それはインターフェースからキャプチャしているだけです。

私はこのシナリオを見ました:

  1. 8.2->9.2を9.1->9.2に変換するとSYNフラグが含まれます
  2. 9.2->9.1は9.2->8.2に変換されますSYN+ACKフラグが含まれています
  3. そして、ステップ2には、RSTフラグ付きの9.1->9.2が含まれています。

Windows Server 2003は、NAT接続をリセットします。ポートをバインドしたくありません。

どうすればこれを処理できますか?

アップデート:

user1202136、次のことはどのように可能ですか。

Windowsファイアウォールを使用して、ユーザースペースNATが使用するポートからのRSTパケットをブロックします。

独自のNDISドライバーを作成せずに?

4

1 に答える 1

5

TCP仕様によれば、どのプロセスにもバインドされていないポートでACK(またはSYN + ACK)を受信すると、常にRSTが送信されます。これは、ノードのクラッシュを確実に検出できるようにするために行われます。

あなたの場合、RSTパケットを生成するのはWindowsServer2003のTCP/IP実装です。ACKがTCP層に到達しないようにするか、RSTがワイヤに到達するのをブロックする必要があります。これをいくつかの方法で試すことができます。

  1. インターフェイスでTCP(IPではない)を無効にします。
  2. Windowsファイアウォールを使用して、ユーザースペースNATが使用するポートからのRSTパケットをブロックします。
  3. (これが機能しているかどうかはわかりません)Windowsファイアウォールを使用して、ユーザースペースNATが使用するポートへのすべてのTCPパケットをブロックします。これにより、パケットがRAWソケットに到達するのもブロックされるのではないかと思います。
于 2012-03-29T14:55:53.217 に答える