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

时间:2017-03-21 16:39:15

标签: c# .net proxy ftp socks

我已使用以下代码成功将文件上传到我的FTP服务器。

using (WebClient client = new WebClient())
{
    client.Credentials = new NetworkCredential("USER", "PASS");
    client.UploadFile("ftp://adress/" + filename, "STOR", file);
}

但是,这不适用于受防火墙保护的网络。 连接必须通过SOCKS代理才能绕过防火墙。

如何做到这一点? 如何使用http://mentalis.org/或任何其他库的第三方库建立与SOCKS代理的连接并将文件上传到服务器?

1 个答案:

答案 0 :(得分:2)

.NET框架FTP客户端(FtpWebRequestWebClient)无法使用SOCKS代理进行连接,仅HTTP [download only] and ISA client proxies are supported

  

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

     

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

因此您需要使用第三方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的选项,请参阅raw settings

更容易为您安装WinSCP GUI generate C# FTP code template

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

(我是WinSCP的作者)