2012-08-06 54 views
1

我寫了一個應用程序,它將客戶端直接相互連接並保持連接至關重要。在使用卓越技術(谷歌)做了一些研究之後,我發現通過執行NAT-Punching或NAT-Traversal可以實現我需要的功能。TCP NAT穿透/ - 用.NET打孔

大多數人似乎使用NAT穿孔UDP,但在我的情況下,我需要與TCP(這是一個事實,之前有人問「爲什麼不是UDP?」),我找不到任何示例代碼或至少一個適當的教程。我可以找到理論附件的位置,但與Sockets或TCPClient無關(我更喜歡套接字)。

有人可以請我鏈接一些示例代碼,我可以連接兩個客戶端後面的NAT或鏈接到一個完整的教程與示例代碼? 我知道這個目標很難在.NET中完成(我使用VB.NET,但我也能夠閱讀和理解C#),但它應該是可能的。

UPnP不是一個選項,因爲一些NAT由於安全原因而被取消激活。

+0

有些東西你可以用原始套接字來做,但我不想寫它。 – CodesInChaos 2012-08-06 15:34:02

+0

所以我想我必須找出一些路由.... k thx! – Husky110 2012-08-06 17:39:56

回答

1

除非您有權訪問原始套接字,否則NAT穿孔不能通過TCP完成。您需要對序列號和TTL值進行一些技巧性的操作,以使其工作。但是由於惡意軟件的剪切量正在濫用原始套接字來傳播或執行DDoS,所以在Windows XP之後的Windows版本的所有版本的操作系統上,Windows Raw Sockets都是不允許的。

您執行下列操作之一:

  1. 使用UDP,把代碼重新請求丟失的包或重構代碼來處理丟失的數據包,如果這是可以接受的。
  2. 使用服務器作爲中間人流過
  3. 其中一端必須能夠製作原始插座。
+0

打孔技術不需要原始插座。我用winSock成功完成了它。當然,你需要一箇中間人服務器,這兩個服務器可以同時連接兩個對等體。 – 2015-01-20 15:34:33