连接需要身份验证的SOCKS代理

本文关键字:SOCKS 代理 身份验证 连接 | 更新日期: 2023-09-27 17:53:24

我在我的项目中使用Fiddler Core,并且通过不需要身份验证的SOCKS代理成功地路由请求。

oS["x-OverrideGateway"] = string.Format("socks={0}:{1}", ProxyHost, ProxyPort);

现在我正在尝试连接到需要身份验证的SOCKS代理。我已经尝试添加以下内容,根据这个非socks指南:使用CBT进行身份验证。

oS["X-AutoAuth"] = Auth;

其中Auth是包含username:password形式的凭据的字符串。但是连接总是失败,并出现坏网关异常。我已经成功地使用curl连接到相同的SOCKS代理,并遵循它的认证SOCKS代理指南。

X-AutoAuth不工作后,我反映了一些代码,发现这种身份验证机制不用于SOCKS。

连接需要身份验证的SOCKS代理

很遗憾,Fiddler(和FiddlerCore)目前还不支持SOCKS5。

但是,您可以通过https://fiddler.ideas.aha.io/请求。

我们遇到了类似的问题,并创建了一个NuGet库来帮助您将SOCKS v4流量"转换"到SOCKS v5,并且我们还添加了身份验证支持。

这个小例子展示了如何用用户名和密码连接FiddlerCore和SOCKS5代理:

var localEndpoint = new IPEndPoint(IPAddress.Loopback, 4321);
var remoteEndpoint = new IPEndPoint(IPAddress.Parse("remote proxy IP"), 8080);
ISocksRelayServer relay = new SocksRelayServer.SocksRelayServer(localEndpoint, remoteEndpoint)
{
    Username = "...",
    Password = "..."
};
// Debug to console
relay.OnLogMessage += (sender, s) => Console.WriteLine($"OnLogMessage: {s}");
relay.OnLocalConnect += (sender, endpoint) => Console.WriteLine($"OnLocalConnect: {endpoint}");
relay.OnRemoteConnect += (sender, endpoint) => Console.WriteLine($"OnRemoteConnect: {endpoint}");
// Start relay server
relay.Start();
// Start FiddlerCore
FiddlerApplication.Startup(...);
// Set upstream gateway before requests
FiddlerApplication.BeforeRequest += session =>
{
    session["x-OverrideGateway"] = relay.LocalEndPoint.ToString();
}