簡體   English   中英

Socket.Bind和IP源路由,具有多個本地網絡接口

[英]Socket.Bind and IP source routing, with multiple local network interfaces

我寫了一個在一個系統(Win7)上運行的工具,它有兩個網絡接口,每個網絡接口鏈接到一個不同的子網,每個子網都有自己的網關,然后鏈接到兩個獨立的遠程網絡(每個網關后都有防火牆)。 我正在使用Socket.Bind (在執行Connect之前)通過兩個NIC啟動傳出TCP連接到每個相關NIC的IP地址。 第一個NIC工作正常,但對於第二個NIC,我收到SocketException“嘗試對無法訪問的網絡進行套接字操作”

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

調整本地路由表有所幫助,但它讓我想知道套接字綁定到特定本地IP的能力背后的整個推理。

做了一些額外的閱讀,我發現確實存在“源IP路由”這樣的事情,但是由於安全原因,默認情況下它在Windows中被禁用(通過DisableIPSourceRouting注冊表設置),如下所述:

問題:

  1. 如果我的原始理解是正確的(即Socket.Bind應該足夠) - 為什么它不工作而不修改路由表?
  2. 如果我的理解不正確(即Socket.Bind被忽略並且使用了路由) - 擁有Socket.Bind是什么意思? 為什么要這樣做?
  3. 另外,我想更好地理解,啟用源IP路由的實際風險是什么(最好是可能的漏洞利用示例)?
  4. 任何解決需求而無需手動修改本地路由表的想法將不勝感激。

非常感謝。

好的,經過一些閱讀,這里有一些關於正在發生的事情的高級解釋。 我仍然需要在我的系統中驗證以下結論。 顯然,選擇網絡接口時通常會忽略本地綁定。 相反,路由表用於此目的。 然而,在強主機模式 (默認為Vista和XP中較新的,不存在的),源IP 用作在路由表中查找一個“約束”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM