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

dzjeubhm  于 2022-11-15  发布在  .NET
关注(0)|答案(4)|浏览(258)

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

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

这对于http代理来说很好用,但是它不能连接到SOCKS5代理。我在谷歌上搜索了很多答案,但是没有找到解决这个问题的人,尽管我已经找到了几次这个问题。有人知道我该怎么做吗?

pvabu6sv

pvabu6sv1#

显然,Microsoft没有将SOCKS代理支持构建到他们的Web类中(参见http://windows-tech.info/13/f17246e7dd4a8a2b.php
我也想通过SOCKS5代理使用内置的.NET Web功能,但还没有找到任何满意的解决方案。我想我的下一步是通过Reflector或从Mono代码库获得.NET类的源代码,并将其重构为使用上面链接中提到的ProxySocket类。
这比我想要的工作要多,但似乎是唯一的方法。

afdcj2ne

afdcj2ne2#

在.NET 6中,您可以轻松地执行以下操作:

var proxy = new WebProxy
{
    Address = new Uri("socks5://localhost:8080")
};
//proxy.Credentials = new NetworkCredential(); //Used to set Proxy logins. 
var handler = new HttpClientHandler
{
    Proxy = proxy
};
var httpClient = new HttpClient(handler);

或者可以注入IHttpClientFactory时(推荐方式):
ConfigureServices方法中:

Services.AddHttpClient("WithProxy")
    .ConfigurePrimaryHttpMessageHandler(() =>
    {
        var proxy = new WebProxy
        {
            Address = new Uri("socks5://localhost:8080")
        };
        return new HttpClientHandler
        {
            Proxy = proxy
        };
    });

然后在控制器中或任何可以注入IHttpClientFactory对象的位置,创建一个新的httpClient(配置了代理)示例,如下所示:

httpClient = httpClientFactory.CreateClient("WithProxy");

以下是更详细的说明:https://dotnetcoretutorials.com/2021/07/11/socks-proxy-support-in-net/

uqjltbpv

uqjltbpv3#

如果您可以使用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/");
    }
}
mccptt67

mccptt674#

理论上,你可以继承webservice类并覆盖GetWebRequest和GetWebResponse,然后你可以使用这个c# socks类http://www.codeproject.com/Articles/5954/C-class-for-connecting-via-a-SOCKS-Proxy-Server,将webrequest转换成sockets,然后再转换回来。
我所能找到的最快的解决方案是使用WideCap设置一个系统范围的socks代理。这将通过socks代理服务器路由机器上的所有流量。

相关问题