使用WinSCP .Net Assembly访问FTP with TLS Explicit Encryption
2014-01-25 15:09
936 查看
最近有一个任务需要我用.Net实现一个程序来访问FTP。这个FTP使用的加密方式是TLS Explicit Encryption,并且使用Proxy。以前一直使用System.Net.FtpWebRequest连接FTP,但是如果将FtpWebRequest实例化对象的属性EnableSsl=true,并将属性Proxy赋了WebProxy的实例化对象之后。程序运行会throw excption "SSL cannot be enabled
when using a proxy"(图1)。查了一下Microsoft的MSDN也没法发现好的solution,没办法只好自己找一个第3方的assembly来解决了。
图1
在网上查了一下很多FTPs的Assembly都是收费的,终于给我找到了一个免费的assembly就是WinSCP,使用非常简单,并且通过了测试。
首先,去WinSCP Download页面(图2)下载WinScp的软件,当前的版本是5.5.1。
图2
安装完成后在程序目录中有2个文件是我们需要的,这2个文件是“WinSCP.exe”和"WinSCPnet.dll","WinSCPnet.dll"是Assembly文件可以在.net中被引用,而"WinSCP.exe"需要和"WinSCPnet.dll"在同一个目录下,因为assembly需要和"WinSCP.exe"进行交互。这些在Visual Studio 2010中设置好了之后,代码实现如下:
SessionOptions sessionOptions = new SessionOptions();
sessionOptions.Protocol = Protocol.Ftp;
sessionOptions.HostName = "xxxxxxxxxxxxxx";
sessionOptions.UserName = "xxxxxxxxxxxxxx";
sessionOptions.Password = "xxxxxxxxxxxxxxx";
sessionOptions.FtpSecure = FtpSecure.ExplicitTls;
sessionOptions.PortNumber = 21;
sessionOptions.FtpMode = FtpMode.Passive;
//如果没有Certificate一定要设置这句话
sessionOptions.GiveUpSecurityAndAcceptAnyTlsHostCertificate = true;
//使用SessionOptions对象的方法AddRawSettings来添加Proxy
sessionOptions.AddRawSettings("ProxyMethod", "3");
sessionOptions.AddRawSettings("ProxyHost", "proxy-server");
sessionOptions.AddRawSettings("ProxyPort","8080");
using (Session session = new Session())
{
session.Open(sessionOptions);
TransferOptions transferOptions = new TransferOptions();
transferOptions.TransferMode = TransferMode.Binary;
TransferOperationResult transferResult;
//上传文件,Session对象的方法PutFiles
transferResult = session.PutFiles(@"c:\hmz\ZCNC.LOG", "/inbound/aaa.txt", false, transferOptions);
transferResult.Check();
foreach (TransferEventArgs transfer in transferResult.Transfers)
{
Console.WriteLine("Upload of {0} succeeded",transfer.FileName);
}
//下载文件,Session对象的方法GetFiles
transferResult=session.GetFiles("/inbound/aaa.txt", @"c:\hmz\aaa.txt", false, transferOptions);
transferResult.Check();
foreach (TransferEventArgs transfer in transferResult.Transfers)
{
Console.WriteLine("Download of {0} succeeded", transfer.FileName);
}
}
具体每个Class的使用方法大家去看Library。WinSCP目前支持3种文件传输协议“FTP”,“SFTP”,“SCP”,并且提供了实现的Source Code。
参考:
WinSCP .Net Assembly and COM Library
when using a proxy"(图1)。查了一下Microsoft的MSDN也没法发现好的solution,没办法只好自己找一个第3方的assembly来解决了。
图1
在网上查了一下很多FTPs的Assembly都是收费的,终于给我找到了一个免费的assembly就是WinSCP,使用非常简单,并且通过了测试。
首先,去WinSCP Download页面(图2)下载WinScp的软件,当前的版本是5.5.1。
图2
安装完成后在程序目录中有2个文件是我们需要的,这2个文件是“WinSCP.exe”和"WinSCPnet.dll","WinSCPnet.dll"是Assembly文件可以在.net中被引用,而"WinSCP.exe"需要和"WinSCPnet.dll"在同一个目录下,因为assembly需要和"WinSCP.exe"进行交互。这些在Visual Studio 2010中设置好了之后,代码实现如下:
SessionOptions sessionOptions = new SessionOptions();
sessionOptions.Protocol = Protocol.Ftp;
sessionOptions.HostName = "xxxxxxxxxxxxxx";
sessionOptions.UserName = "xxxxxxxxxxxxxx";
sessionOptions.Password = "xxxxxxxxxxxxxxx";
sessionOptions.FtpSecure = FtpSecure.ExplicitTls;
sessionOptions.PortNumber = 21;
sessionOptions.FtpMode = FtpMode.Passive;
//如果没有Certificate一定要设置这句话
sessionOptions.GiveUpSecurityAndAcceptAnyTlsHostCertificate = true;
//使用SessionOptions对象的方法AddRawSettings来添加Proxy
sessionOptions.AddRawSettings("ProxyMethod", "3");
sessionOptions.AddRawSettings("ProxyHost", "proxy-server");
sessionOptions.AddRawSettings("ProxyPort","8080");
using (Session session = new Session())
{
session.Open(sessionOptions);
TransferOptions transferOptions = new TransferOptions();
transferOptions.TransferMode = TransferMode.Binary;
TransferOperationResult transferResult;
//上传文件,Session对象的方法PutFiles
transferResult = session.PutFiles(@"c:\hmz\ZCNC.LOG", "/inbound/aaa.txt", false, transferOptions);
transferResult.Check();
foreach (TransferEventArgs transfer in transferResult.Transfers)
{
Console.WriteLine("Upload of {0} succeeded",transfer.FileName);
}
//下载文件,Session对象的方法GetFiles
transferResult=session.GetFiles("/inbound/aaa.txt", @"c:\hmz\aaa.txt", false, transferOptions);
transferResult.Check();
foreach (TransferEventArgs transfer in transferResult.Transfers)
{
Console.WriteLine("Download of {0} succeeded", transfer.FileName);
}
}
具体每个Class的使用方法大家去看Library。WinSCP目前支持3种文件传输协议“FTP”,“SFTP”,“SCP”,并且提供了实现的Source Code。
参考:
WinSCP .Net Assembly and COM Library
相关文章推荐
- java使用commons-net-2.2访问ftp
- Office with .Net (二) ――― 使用.Net访问Office编程接口
- Office with .Net (二) ――― 使用.Net访问Office编程接口
- Office with .Net (二) ――― 使用.Net访问Office编程接口
- Office with .Net (二) ――― 使用.Net访问Office编程接口
- 如何使用ASP.NET AJAX访问Web Services
- 简介使用ASP.NET访问Oracle数据库的方法
- Windows 7操作系统中使用IIS,WinScp搭建ftp服务器
- 使用ado.net访问数据库
- 自己写的数据库访问组件 使用ADO.NET 比较简单
- 数据访问:使用 ADO.NET 的最佳实践
- 给你一个例子使用了Net::FTP
- 简介使用ASP.NET访问Oracle数据库的方法
- Windows XP下使用ASP.Net 访问Access数据库提示“System.Data.OleDb.OleDbException: 未指定的错误”的解决办法
- Dropthings 2.6 数据访问使用了ado.net data model
- 如何配置proftpd使用FTPS(FTP over SSL/TLS)
- 在ASP.Net With C# 中使用 DataGrid 控件分页展示数据
- 如何使用 Visual Basic .NET 访问串行端口和并行端口
- C#、VB.NET使用HttpWebRequest访问https地址(SSL)的实现方法
- win 7下使用IIS搭建FTP服务器和添加用户访问