如何通过SOCKS代理将文件上传到FTP服务器?

我已经使用以下代码成功地将文件上传到我的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客户端( FtpWebRequestWebClient )无法使用SOCKS代理进行连接,仅支持HTTP [仅下载]和ISA客户端代理 :

FtpWebRequest类支持HTTP和ISA防火墙客户端代理。

如果指定的代理是HTTP代理,则仅支持DownloadFile,ListDirectory和ListDirectoryDe​​tails命令。

所以你需要使用第三方FTP库。


例如,使用WinSCP .NET程序集 ,您可以使用:

 // 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的选项,请参阅原始设置 。

更容易让WinSCP GUI为您生成C#FTP代码模板 。

请注意,WinSCP .NET程序集不是本机.NET库。 它相当于控制台应用程序上的瘦.NET包装器。

(我是WinSCP的作者)