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

Posted

技术标签:

【中文标题】如何通过 SOCKS 代理将文件上传到 FTP 服务器?【英文标题】:How do I upload a file to an FTP server through SOCKS proxy? 【发布时间】: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 代理的连接并将文件上传到服务器?

【问题讨论】:

【参考方案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#,但我没有)

以上是关于如何通过 SOCKS 代理将文件上传到 FTP 服务器?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置http代理上ftp并且可以上传?

如何在Linux下配置socks5代理

如何利用ROS软路由搭建SOCKS5服务器

如何使基于扭曲的 irc 客户端通过 socks 代理连接?

转-linux下配置socks5代理

使用 socks4 时的认证方式