我正在使用WCF的netTcpBinding,它直接連接到端點,似乎並不知道襪子代理的任何事情。如何強制System.Net.Socket.Connect()方法使用socks代理(代碼注入vs外部自定義代理)
我需要使用代理服務器,因爲我的大多數客戶端不會允許直接出站連接,並且始終強制使用襪子代理服務器。
我的第一個想法是配置.NET Framework來做到這一點,所以我編輯machine.config文件如下,但似乎只與HTTP代理(未襪子)
<system.net> <defaultProxy enabled="true"> <proxy usesystemdefault="False" proxyaddress="foo:1080" bypassonlocal="True"/> <module /> </defaultProxy> </system.net>
工作
我的第二個選擇是實現從netTcpBinding繼承的自定義綁定,並且只覆蓋連接邏輯以添加代理代碼。
我dissasembled的System.ServiceModel組裝,不幸的是,很多類被標記爲內部(包括SocketConnectionInitiator,ConnectionPoolHelper,ClientFramingDuplexSessionChannel和FramingDuplexSessionChannel,並可能其他藏漢)
這使得創建一個自定義NetTcpBinding的一個巨大的工作,而且可能會導致一些問題,因爲.net框架的新版本交付。
另一個想法是將一些代碼直接注入到Socket.Connect()方法中。這很容易實現,但我對修改.net框架的內部代碼不是很有信心。另外,雖然套接字類沒有被標記爲密封,但我害怕破壞某些東西,特別是在後來的框架中。
我現在最後的想法:我可以創建一個小代理工具,與我的軟件運行在同一臺計算機上,它會自動連接到公司的socks代理,併發出良好的「連接服務器」命令到真正的襪子代理。
後一種選擇在我看來是更好的,但我很好奇聽到別人的意見。
您認爲如何?