`
azhqiang
  • 浏览: 9032 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

通过JSCH 实现FTP各种操作

    博客分类:
  • java
阅读更多


FTPS:

一种多传输协议,相当于加密版的FTP。当你在FTP服务器上收发文件的时候,你面临两个风险。第一个风险是在上载文件的时候为文件加密。第二个风险是,这些文件在你等待接收方下载的时候将停留在FTP服务器上,这时你如何保证这些文件的安全。你的第二个选择(创建一个支持SSL的FTP服务器)能够让你的主机使用一个FTPS连接上载这些文件。这包括使用一个在FTP协议下面的SSL层加密控制和数据通道。一种替代FTPS的协议是安全文件传输协议(SFTP)。这个协议使用SSH文件传输协议加密从客户机到服务器的FTP连接。
FTPS是在安全套接层使用标准的FTP协议和指令的一种增强型FTP协议,为FTP协议和数据通道增加了SSL安全功能。FTPS也称作“FTP-SSL”和“FTP-over-SSL”。SSL是一个在客户机和具有SSL功能的服务器之间的安全连接中对数据进行加密和解密的协议。



当使用FTPS与服务器连接时,有两种方法:显式和隐式。
简单来说:
显示又叫FTPES, FTPS客户端跟FTPS服务器必须显式使用一种同样的加密方法。如果客户端不要求加密,服务器也允许非加密通讯。
隐式 就是客户端直接通过TSL/SSL加密与服务器联系,如果服务器无响应,则停止通讯。



FTP4J 支持 FTPS/FTPES secured connection,其中使用FTPES还是原来的21端口,使用FTPS使用的是990端口,使用SFTP的是22端口,以下说的不包含SFTP内容。

可以查看Serv-U域详细信息查看服务邦定的端口,默认情况下是以下内容:



如果我们使用flashfxp进行连接,则使用不同连接方式时要进行选择,普通FTP连接使用21端口,不用选择:



我们通过21端口进行显示FTPS连接:
Java代码  收藏代码

    package test; 
    import it.sauronsoftware.ftp4j.FTPClient; 
    import java.security.SecureRandom; 
    import java.security.cert.X509Certificate; 
    import javax.net.ssl.SSLContext; 
    import javax.net.ssl.SSLSocketFactory; 
    import javax.net.ssl.TrustManager; 
    import javax.net.ssl.X509TrustManager; 
    /**
     * 通过21端口进行显示FTPS连接
     * @说明 
     * @author cuisuqiang
     * @version 1.0
     * @since
     */ 
    public class Ftp4jTest { 
        public static void main(String[] args) { 
            try { 
                TrustManager[] trustManager = new TrustManager[] { new X509TrustManager() { 
                    public X509Certificate[] getAcceptedIssuers() { 
                        return null; 
                    } 
                    public void checkClientTrusted(X509Certificate[] certs, 
                            String authType) { 
                    } 
                    public void checkServerTrusted(X509Certificate[] certs, 
                            String authType) { 
                    } 
                } }; 
                SSLContext sslContext = null; 
                sslContext = SSLContext.getInstance("SSL"); 
                sslContext.init(null, trustManager, new SecureRandom()); 
                SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(); 
                FTPClient client = new FTPClient(); 
                client.setSSLSocketFactory(sslSocketFactory); 
                client.setSecurity(FTPClient.SECURITY_FTPES);  
                client.connect("192.168.1.122", 21); 
                client.login("123", "123123"); 
                System.out.println(client.toString()); 
                System.out.println(client.currentDirectory()); 
            } catch (Exception e) { 
                e.printStackTrace(); 
            } 
        } 
    } 



代码会打印连接信息和当前目录

使用990端口进行隐式FTPS连接:
Java代码  收藏代码

    package test; 
    import it.sauronsoftware.ftp4j.FTPClient; 
    import java.security.SecureRandom; 
    import java.security.cert.X509Certificate; 
    import javax.net.ssl.SSLContext; 
    import javax.net.ssl.SSLSocketFactory; 
    import javax.net.ssl.TrustManager; 
    import javax.net.ssl.X509TrustManager; 
    /**
     * 进行隐式FTPS连接
     * @说明 
     * @author cuisuqiang
     * @version 1.0
     * @since
     */ 
    public class Ftp4jTest { 
        public static void main(String[] args) { 
            try { 
                TrustManager[] trustManager = new TrustManager[] { new X509TrustManager() { 
                    public X509Certificate[] getAcceptedIssuers() { 
                        return null; 
                    } 
                    public void checkClientTrusted(X509Certificate[] certs, 
                            String authType) { 
                    } 
                    public void checkServerTrusted(X509Certificate[] certs, 
                            String authType) { 
                    } 
                } }; 
                SSLContext sslContext = null; 
                sslContext = SSLContext.getInstance("SSL"); 
                sslContext.init(null, trustManager, new SecureRandom()); 
                SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(); 
                FTPClient client = new FTPClient(); 
                client.setSSLSocketFactory(sslSocketFactory); 
                client.setSecurity(FTPClient.SECURITY_FTPS); 
                client.connect("192.168.1.122", 990); 
                client.login("123", "123123"); 
                System.out.println(client.toString()); 
                System.out.println(client.currentDirectory()); 
            } catch (Exception e) { 
                e.printStackTrace(); 
            } 
        } 
    } 



打印内容相同



进行显示还是隐式连接的最大不同是指定了连接方式:

这个情况官方也给出了详细的说明:

The ftp4j library supports both FTPS (FTP over implicit TLS/SSL) and FTPES (FTP over explicit TLS/SSL).
The setSecurity() method can be used to turn on the feature:
client.setSecurity(FTPClient.SECURITY_FTPS); // enables FTPS
client.setSecurity(FTPClient.SECURITY_FTPES); // enables FTPES
Both methods must be called before connecting the remote server.
If the security is set to SECURITY_FTPS, the default port used by the connect() method changes to 990



请您到ITEYE网站看原创,谢谢!

http://cuisuqiang.iteye.com/ !
分享到:
评论

相关推荐

    FTP文件上传下载删除+jsch.jar

    在这个主题中,我们将深入探讨如何使用JSCH库来实现FTP的文件上传、下载和删除功能。 JSCH是一个纯Java实现的SSH2库,它允许Java程序执行SCP(Secure Copy)、SFTP(Secure File Transfer Protocol)和FTP通过SSH...

    ftp 各种客户端 ftp4j-1.5.1.zip j-ftp-1.52.tar.gz jsch-0.1.43.zip

    在这个场景中,我们看到三个不同的压缩包文件,它们可能包含了实现FTP客户端功能的库或工具:ftp4j-1.5.1.zip、j-ftp-1.52.tar.gz以及jsch-0.1.43.zip。 首先,`ftp4j-1.5.1.zip` 是一个Java库,用于开发FTP客户端...

    详解Java使用Jsch与sftp服务器实现ssh免密登录

    ChannelSftp类是JSch实现SFTP的核心类,它封装了SFTP协议的所有操作方法。例如,put()用于文件上传,get()用于文件下载,cd()用于进入指定目录,ls()用于获取指定目录下的文件列表,rename()用于重命名文件等。利用...

    java实现ftp、sftp的文件上传和下载

    Java中可以使用Apache Commons Net库来实现FTP操作。首先,需要在项目中引入Apache Commons Net的依赖。接着,可以创建一个`FTPClient`实例,设置服务器地址、端口、用户名和密码,然后连接到FTP服务器。文件上传和...

    JSch - Java实现的SFTP(文件上传详解篇)

    JSch - Java 实现的 SFTP(文件上传详解篇) JSch 是 Java Secure Channel 的缩写,JSch 是一个 SSH2 的纯 Java ...ChannelSftp 类是 JSch 实现 SFTP 核心类,提供了许多有用的方法用于文件上传、下载、目录操作等。

    jsch的jar包

    要使用这个库,开发者需要将"jsch.jar"添加到项目的类路径中,并按照JSCH的API文档编写相应的代码来实现SFTP操作。 总结来说,JSCH是Java平台上的一个强大工具,它使开发人员能够方便地集成SSH2协议,尤其是实现...

    Java实现FTP上传与下载

    这里我们将深入探讨Java中实现FTP操作的核心知识点。 首先,Java通过`commons-net`库提供了对FTP的支持,这个库包含了`FTPClient`类,它是处理FTP连接、文件传输和FTP命令的主要工具。`FTPClient`类是Apache ...

    jsch版本50-53.rar

    JSCH,全称为Java Simple SSH,是一个开源的Java库,用于实现SSH2协议,以便在Java应用程序中进行安全的远程文件传输、shell访问以及端口转发。JSCH库广泛应用于需要与支持SSH2的服务器进行交互的场景,例如SFTP...

    java实现FTP客户端

    6. **异常处理**:FTP操作可能会遇到各种异常,如网络连接失败、认证错误等,因此必须进行适当的异常处理。例如,可以捕获`IOException`、`FTPException`等,并根据具体情况进行错误提示或重试操作。 7. **安全考虑...

    多线程实现ftp客户端程序

    在本项目中,“多线程实现ftp客户端程序”是核心主题,它涉及到如何利用多线程技术来构建一个功能丰富的FTP(File Transfer Protocol)客户端。FTP是一种网络协议,用于在互联网上进行文件传输,而多线程的引入则...

    com.jcraft.jsch_0.1.31.jar commons-net-3.2.jar

    标题中的"com.jcraft.jsch_0.1.31.jar"和"commons-net-3.2.jar"是两个在JAVA编程环境中用于实现FTP(File Transfer Protocol)功能的重要库文件,它们是Java开发者进行FTP通信时经常会用到的依赖。 首先,`...

    jsch-0.1.53.zip

    JavaScript SSH (JSch) 是一个Java库,它允许开发者在Java应用程序中实现Secure File Transfer Protocol (SFTP)、Secure Copy (SCP) 和 SSH2 (Secure Shell) 的功能。`jsch-0.1.53.zip` 包含的是JSch库的0.1.53版本...

    Java实现ftp上传

    本文将详细介绍如何使用Java实现FTP上传功能,并探讨相关知识点。 首先,要进行FTP操作,我们需要一个Java FTP客户端库。Java标准库并不直接支持FTP,但提供了`java.net.Socket`类,可以通过它构建低级别的FTP连接...

    java 实现ftp上传下载

    本文将深入探讨如何使用Java实现FTP的上传和下载功能,以及如何处理多个FTP连接进行互传。 首先,我们需要了解Java中的`java.net`和`org.apache.commons.net.ftp`这两个库。`java.net`是Java标准库的一部分,提供了...

    Java实现FTP的上传下载功能

    - 代码中未明确指出使用的FTP库,但通常Java开发者会使用Apache Commons Net库或者JSch库来实现FTP功能。这些库提供了丰富的FTP操作接口,简化了FTP操作的实现。 总的来说,Java实现FTP功能涉及到网络通信、文件I/...

    java实现ftp自动上传文件

    在Java中实现FTP功能,通常会使用第三方库如Apache Commons Net或JSch。这里提到的"ftpClient"可能指的是Apache Commons Net库中的`FTPClient`类,它提供了一系列API来执行FTP操作,如登录、上传、下载、列出目录等...

    jsch的jar包,包含0.1.51,0.1.52,0.1.53,0.1.54等这几个版本

    3. **SCP(Secure Copy)**:JSch也提供了SCP命令的功能,可以实现文件和目录的复制操作。 4. **端口转发**:SSH的端口转发功能允许将本地端口上的流量转发到远程主机,可以用来绕过防火墙限制,或者安全地访问远程...

    用Java实现FTP服务器 .rar_FTP服务器_ftp_java ftp_java ftp 服务器_java ftp服务器

    标题中的“用Java实现FTP服务器”表明我们要讨论的是如何使用Java编程语言来构建一个FTP(File Transfer Protocol)服务器。FTP是一种用于在互联网上传输文件的标准协议。Java由于其跨平台性和丰富的类库,成为了...

    java通过sftp模式实现FTP的文件上传下载删除功能

    本篇文章将详细探讨如何使用Java通过SFTP模式实现FTP的文件上传、下载和删除功能。 一、SFTP简介 SFTP与传统的FTP不同,FTP在明文传输数据,存在安全隐患,而SFTP则利用SSH提供的加密机制,确保数据在传输过程中的...

    Java实现的FTP连接与数据浏览程序

    `FTPClient`类封装了所有FTP操作,如`connect()`, `login()`, `changeWorkingDirectory()`, `listFiles()`, `storeFile()`, `retrieveFile()`等。 为了实现FTP数据浏览,我们需要解析服务器返回的目录列表,这通常...

Global site tag (gtag.js) - Google Analytics