2012-03-21 19 views
0

我想製作我自己的用戶模式NAT應用程序。如何編寫沒有任何綁定端口的用戶模式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接口RAW IP分組。
  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 containt SYN + ACK標誌
  3. 並且第2步包含帶有RST標誌的9.1-> 9.2 ...

Windows Server 2003重置我的NAT連接。我根本不想綁定任何端口。

我該如何處理?

UPDATE:

user1202136,怎麼可能到:

使用Windows防火牆從您的 用戶空間NAT使用的端口阻止RST包。

沒有寫自己的NDIS驅動程序?

回答

5

根據TCP規範,在沒有綁定到任何進程的端口上收到ACK(或SYN + ACK)時,始終發送RST。這樣做是爲了確保可以可靠地檢測到節點崩潰。

就你而言,它是Windows Server 2003中生成RST數據包的TCP/IP實現。您應該阻止ACK到達TCP層或阻止RST到達網絡。您可以嘗試使用以下幾種方法:

  1. 在接口上禁用TCP(但不是IP)。
  2. 使用Windows防火牆阻止來自用戶空間NAT使用的端口的RST數據包。
  3. (不確定這是否正常)使用Windows防火牆阻止所有TCP數據包到用戶空間NAT使用的端口。恐怕這也會阻止數據包到達您的RAW套接字。
+2

+1,正確的規範,正確的方法來過濾掉可疑的'RST'數據包。噢,我記得當人們開始這樣做時,爲了防止他們的ISP阻止他們的下載... \ *搖動手杖\ * – MrGomez 2012-03-30 22:50:23

+1

...或者如果您願意添加非用戶模式組件,您可以創建一箇中間NDIS驅動程序來刪除您不想讓TCP堆棧看到的RST包。 – Kimvais 2012-03-31 19:55:28

+0

我剛剛更新了我的問題,謝謝你的回覆! – k06a 2012-04-04 06:01:44

相關問題