2010-11-03 35 views
4

我編寫了一個運行在具有兩個網絡接口的系統(Win7)上的工具,每個接口連接到一個不同的子網,每個子網都有自己的網關,然後鏈接到兩個分開遙遠的網絡(每個網關之後都有傳出的防火牆)。我使用Socket.Bind(在做Connect之前)爲每個相關NIC的IP地址啓動通過兩個NIC的傳出TCP連接。第一個網卡工作正常,但對於第二個網卡,我得到SocketException「套接字操作嘗試連接到無法訪問的網絡」Socket.Bind和IP源路由,具有多個本地網絡接口

我最初的理解是,由於套接字綁定到具有其網關定義的具體NIC的本地端點,連接應該路由到此網關,因此應該工作。但是,似乎源IP地址被忽略,並且路由根據本地路由表工作(即,第二個NIC的連接請求轉到第一個,默認網絡,並且因爲它具有錯誤的子網而被拒絕)。

調整本地路由表有所幫助,但它讓我想知道套接字能夠綁定到特定本地IP的全部理由。由於安全原因,如上所述,我發現確實存在諸如「源IP路由」之類的東西,但它在Windows中默認是禁用的(通過DisableIPSourceRouting註冊表設置)。在這裏:

問題:

  1. 如果我原來的理解是正確的(即Socket.Bind應該足夠) - 爲什麼它沒有修改工作路由表?
  2. 如果我的理解不正確(即Socket.Bind被忽略並且使用了路由) - 使用Socket.Bind有什麼意義?爲什麼要這樣做?
  3. 此外,我想更好地瞭解,啓用源IP路由的實際風險是什麼(最好以可能的漏洞爲例)?
  4. 任何解決這個需求的想法都不需要手動修改本地路由表,我們將不勝感激。

非常感謝。

回答

4

好的,在讀完一些資料後,這裏有一些關於發生了什麼的高層次解釋。我仍然需要在我的系統中驗證下面的結論。顯然,選擇網絡接口時通常會忽略本地綁定。相反,路由表用於此目的。但是,在強主機型號(Vista和更新版本的默認值,XP中不存在)中,源IP 用作路由表查找中的「約束」。

相關問題