package com.logics.test;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.security.KeyStore;
import javax.net.ssl.KeyManager;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import org.apache.commons.net.PrintCommandListener;
import org.apache.commons.net.ftp.FTPSClient;
public class TestFtp {
private static FTPSClient ftpsClient;
private static final String trust_path = "c:/bbb/server.public";
//jassecacerts.cer
// private static final String trust_path = "c:/aaa/jassecacerts.cer";
private static final String trust_pw = "123456";
private static final String key_path = "c:/bbb/client.private";
private static final String key_pw = "123456";
private static final String serverIP = "216.91.145.119";
private static final int serverPort = 990;
private static final int defaultTimeout = 10000;
private static final int soTimeout = 900000;
private static final int dataTimeout = 5000;
public static void main(String[] args) throws Exception {
// ftpsClient = new FTPSClient(true);
// ftpsClient.addProtocolCommandListener(new PrintCommandListener(
// new PrintWriter(System.out)));
if(!connect("active")){
connect("passive");
}
FileInputStream fs = new FileInputStream(trust_path);
System.out.println("storeFile: "
+ ftpsClient.storeFile("test_file", fs));
fs.close();
ftpsClient.disconnect();
}
private static boolean connect(String active) throws Exception{
ftpsClient = new FTPSClient(true);
ftpsClient.addProtocolCommandListener(new PrintCommandListener(
new PrintWriter(System.out)));
ftpsClient.setKeyManager(getKeyManager());
// ftpsClient.setTrustManager(getTrustManager());
ftpsClient.setDefaultTimeout(defaultTimeout);
ftpsClient.connect(serverIP, serverPort);
ftpsClient.setSoTimeout(soTimeout);
ftpsClient.getReplyCode();
ftpsClient.execPBSZ(0);
ftpsClient.execPROT("P");
ftpsClient.login("test", "test");
ftpsClient.changeWorkingDirectory("/TestMailBox");
ftpsClient.setDataTimeout(dataTimeout);
if(active.equalsIgnoreCase("active")){
ftpsClient.enterLocalActiveMode();
}else{
ftpsClient.enterLocalPassiveMode();
}
return testLink();
}
private static boolean testLink(){
long t1 = System.currentTimeMillis();
try {
System.out.println("List file length:" + ftpsClient.listFiles().length);
} catch (IOException e) {
System.out.println(e.getMessage());
long t2 = System.currentTimeMillis();
long t = (t2 - t1)/1000;
System.out.println("t: " + t);
try {
ftpsClient.disconnect();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return false;
}
return true;
}
private static KeyManager getKeyManager() throws Exception {
KeyStore key_ks = KeyStore.getInstance("JKS");
key_ks.load(new FileInputStream(key_path), key_pw.toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory
.getDefaultAlgorithm());
kmf.init(key_ks, key_pw.toCharArray());
KeyManager[] km = kmf.getKeyManagers();
System.out.println("km len: " + km.length);
return km[0];
}
private static TrustManager getTrustManager() throws Exception {
KeyStore trust_ks = KeyStore.getInstance("JKS");
trust_ks.load(new FileInputStream(trust_path), trust_pw.toCharArray());
TrustManagerFactory tf = TrustManagerFactory
.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tf.init(trust_ks);
TrustManager[] tm = tf.getTrustManagers();
System.out.println("tm len: " + tm.length);
return tm[0];
}
}