通过SOCKS5代理连接到.NET Web服务

时间:2009-04-29 19:03:11

标签: c# .net web-services proxy socks

我正在尝试通过SOCKS5代理连接到Web服务。目前,我的app.config如下:

<system.net>
 <defaultProxy enabled="true"  >
  <proxy proxyaddress="http://xxx.xxx.xxx.xxx:yyyy" bypassonlocal="True" />
 </defaultProxy>
</system.net>

这适用于http代理,但它只是不连接到SOCKS5。我已经谷歌搜索到了答案,并且找不到任何解决了这个问题的人,即使我已经找到了几次问题。任何人都知道如何做到这一点?

3 个答案:

答案 0 :(得分:2)

显然,Microsoft没有在其Web类中构建SOCKS代理支持(请参阅http://windows-tech.info/13/f17246e7dd4a8a2b.php

我也处于这样一种情况,即我希望将内置的.NET Web功能与SOCKS5代理一起使用,并且没有找到任何令人满意的解决方案。我想我的下一步是通过Reflector或Mono代码库获取.NET类的源代码,并重构它以使用上面链接中提到的ProxySocket类。

这比我想要的更多,但似乎是唯一的方法。

答案 1 :(得分:0)

理论上,您可以继承webservice类并覆盖GetWebRequest和GetWebResponse。然后你可以使用这个c#socks class http://www.codeproject.com/Articles/5954/C-class-for-connecting-via-a-SOCKS-Proxy-Server并将webrequest转换为套接字然后再转发。

我能找到的最快的解决方案是使用WideCap设置系统范围的socks代理。这将通过socks代理服务器路由计算机上的所有流量。

答案 2 :(得分:0)

如果您能够使用HttpClient,则可以使用SocksSharp

我只是按照这个例子,它对我有用。

var settings = new ProxySettings()
{
    Host = "xxx.xxx.xxx.xxx",
    Port = yyyy
};

using (var proxyClientHandler = new ProxyClientHandler<Socks5>(settings))
{
    using (var httpClient = new HttpClient(proxyClientHandler))
    {
        var response = await httpClient.GetAsync("http://example.com/");
    }
}