如何通过 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 客户端(FtpWebRequest
或 WebClient
)无法使用 SOCKS 代理进行连接,只能使用 HTTP [download only] and ISA client proxies are supported:
FtpWebRequest 类支持 HTTP 和 ISA 防火墙客户端代理。
如果指定的代理是 HTTP 代理,则仅支持 DownloadFile、ListDirectory 和 ListDirectoryDetails 命令。
所以你需要使用第 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 服务器?的主要内容,如果未能解决你的问题,请参考以下文章