如何通过 SOCKS 代理将文件上传到 FTP 服务器?
How do I upload a file to an FTP server through SOCKS proxy?
我已使用以下代码成功将文件上传到我的 FTP 服务器。
using (WebClient client = new WebClient())
{
client.Credentials = new NetworkCredential("USER", "PASS");
client.UploadFile("ftp://adress/" + filename, "STOR", file);
}
但是,这不适用于受防火墙保护的网络。
连接必须通过 SOCKS 代理才能绕过防火墙。
如何做到这一点?
如何使用 http://mentalis.org/ 等第三方库或任何其他库建立与 SOCKS 代理的连接并将文件上传到服务器?
.NET 框架 FTP 客户端(FtpWebRequest
或 WebClient
)无法使用 SOCKS 代理连接,只能 HTTP [download only] and ISA client proxies are supported:
The FtpWebRequest class supports HTTP and ISA Firewall Client proxies.
If the specified proxy is an HTTP proxy, only the DownloadFile, ListDirectory, and ListDirectoryDetails commands are supported.
因此您需要使用第 3 方 FTP 库。
例如 WinSCP .NET assembly,您可以使用:
// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Ftp,
HostName = "example.com",
UserName = "user",
Password = "mypassword",
};
// Configure proxy
sessionOptions.AddRawSettings("ProxyMethod", "2"); // SOCKS5 proxy
sessionOptions.AddRawSettings("ProxyHost", "proxy");
using (Session session = new Session())
{
// Connect
session.Open(sessionOptions);
// Your code
}
对于SessionOptions.AddRawSettings
, see raw settings的选项。
为您提供 WinSCP GUI generate C# FTP code template 更容易。
请注意,WinSCP .NET 程序集不是本机 .NET 库。它是控制台应用程序上的薄 .NET 包装器。
(我是WinSCP的作者)
我已使用以下代码成功将文件上传到我的 FTP 服务器。
using (WebClient client = new WebClient())
{
client.Credentials = new NetworkCredential("USER", "PASS");
client.UploadFile("ftp://adress/" + filename, "STOR", file);
}
但是,这不适用于受防火墙保护的网络。 连接必须通过 SOCKS 代理才能绕过防火墙。
如何做到这一点? 如何使用 http://mentalis.org/ 等第三方库或任何其他库建立与 SOCKS 代理的连接并将文件上传到服务器?
.NET 框架 FTP 客户端(FtpWebRequest
或 WebClient
)无法使用 SOCKS 代理连接,只能 HTTP [download only] and ISA client proxies are supported:
The FtpWebRequest class supports HTTP and ISA Firewall Client proxies.
If the specified proxy is an HTTP proxy, only the DownloadFile, ListDirectory, and ListDirectoryDetails commands are supported.
因此您需要使用第 3 方 FTP 库。
例如 WinSCP .NET assembly,您可以使用:
// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Ftp,
HostName = "example.com",
UserName = "user",
Password = "mypassword",
};
// Configure proxy
sessionOptions.AddRawSettings("ProxyMethod", "2"); // SOCKS5 proxy
sessionOptions.AddRawSettings("ProxyHost", "proxy");
using (Session session = new Session())
{
// Connect
session.Open(sessionOptions);
// Your code
}
对于SessionOptions.AddRawSettings
, see raw settings的选项。
为您提供 WinSCP GUI generate C# FTP code template 更容易。
请注意,WinSCP .NET 程序集不是本机 .NET 库。它是控制台应用程序上的薄 .NET 包装器。
(我是WinSCP的作者)