![](/img/trans.png)
[英]Python socket.bind() to host does not show incoming packets with SIO_RCVALL while sniffing for traffic on an interface
[英]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
注冊表設置),如下所述:
問題:
Socket.Bind
應該足夠) - 為什么它不工作而不修改路由表? Socket.Bind
被忽略並且使用了路由) - 擁有Socket.Bind是什么意思? 為什么要這樣做? 非常感謝。
好的,經過一些閱讀,這里有一些關於正在發生的事情的高級解釋。 我仍然需要在我的系統中驗證以下結論。 顯然,選擇網絡接口時通常會忽略本地綁定。 相反,路由表用於此目的。 然而,在強主機模式 (默認為Vista和XP中較新的,不存在的),源IP 被用作在路由表中查找一個“約束”。
關於強主機模型與弱主機模型的簡要說明: http : //technet.microsoft.com/en-us/magazine/2007.09.cableguy.aspx
關於XP與以上版本的Windows版本有什么不同的解釋: http : //blogs.technet.com/b/networking/archive/2009/04/24/source-ip-address-selection-on-a-多宿主窗口,computer.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.