【问题标题】:How do I upload a file to an FTP server through SOCKS proxy?如何通过 SOCKS 代理将文件上传到 FTP 服务器?
【发布时间】:2017-03-21 16:39:14
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# .net proxy ftp socks


    【解决方案1】:

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

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

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

    所以你需要使用第 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 的选项,请参阅raw settings

    为您提供 WinSCP GUI generate C# FTP code template 更简单。

    请注意,WinSCP .NET 程序集不是本机 .NET 库。它是控制台应用程序上的一个精简的 .NET 包装器。

    (我是 WinSCP 的作者)

    【讨论】:

    • 我已经设法使用您的库上传了一个文件,但我没有使用代理。我意识到免费的好 socks5 代理并不多。可以使用tor网络吗?
    • 不,不支持 tor。无论如何,这是一个不同的问题。
    • +1 用于支持多种语言的连接代码生成器(以为我必须翻译 C#,但我没有)
    猜你喜欢
    • 2018-07-27
    • 2011-04-06
    • 2011-09-25
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多