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

Dan*_*ler 7 .net c# proxy web-services socks

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

<system.net>
 <defaultProxy enabled="true"  >
  <proxy proxyaddress="http://xxx.xxx.xxx.xxx:yyyy" bypassonlocal="True" />
 </defaultProxy>
</system.net>
Run Code Online (Sandbox Code Playgroud)

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

Maj*_*jid 5

在 .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);
Run Code Online (Sandbox Code Playgroud)

或者什么时候可以注射IHttpClientFactory(推荐方式):

在你的ConfigureServices方法中:

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

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

httpClient = httpClientFactory.CreateClient("WithProxy");
Run Code Online (Sandbox Code Playgroud)

这是更详细的描述: https: //dotnetcoretutorials.com/2021/07/11/socks-proxy-support-in-net/


小智 2

显然,微软没有在他们的Web类中构建SOCKS代理支持(参见http://windows-tech.info/13/f17246e7dd4a8a2b.php

我也面临这样的情况:我想将内置的 .NET Web 功能与 SOCKS5 代理一起使用,但尚未找到任何令人满意的解决方案。我想我的下一步是通过 Reflector 或从 Mono 代码库获取 .NET 类的源代码,并将其重构为使用上面链接中提到的 ProxySocket 类。

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