java telnet远程登录linux

//FileName:AnaFile.java

package xiaoqiang.net;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class AnaFile {

 private String myfilepath;
 public AnaFile(File file) throws IOException
 {
  myfilepath=file.getCanonicalPath();
 }
 
 public String[] commandArray() throws IOException
 {
  String mycontent= allContent();
  return mycontent.split("\n");
 }
 
 private String allContent() throws IOException
 {
        StringBuffer sb = new StringBuffer();
        BufferedReader in = null;
        try
        {
            in = new BufferedReader(new FileReader(myfilepath));
            String line = null;
            while ((line = in.readLine()) != null)
            {
                sb.append(line + '\n');
            }
        }
        finally
        {
            if (in != null)
            {
                in.close();
            }
        }
        return sb.toString();
 }
}

 

 

//FileName:NetTelnet.java

 

package xiaoqiang.net;

import java.io.File;
import java.io.InputStream;
import java.io.PrintStream;

import org.apache.commons.net.telnet.TelnetClient;

public class NetTelnet {
 private TelnetClient telnet = new TelnetClient();
 private InputStream in;
 private PrintStream out;
 private char prompt = '$';

 /**
  * 构造函数
  *
  * @param ip
  * @param port
  * @param user
  * @param password
  */
 public NetTelnet(String ip, int port, String user, String password) {
  try {
   telnet.connect(ip, port);
   in = telnet.getInputStream();
   out = new PrintStream(telnet.getOutputStream());
   this.prompt = user.equals("root") ? '#' : '$';
   login(user, password);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 // main
 public static void main(String[] args) {
  try {
   String filepath = args[0];
   AnaFile info = new AnaFile(new File(filepath));
   String[] infoArray = info.commandArray();
   String ip = infoArray[0];
   int port = Integer.valueOf(infoArray[1]);
   String user = infoArray[2];
   String password = infoArray[3];
   NetTelnet telnet = new NetTelnet(ip, port, user, password);
   telnet.sendCommand("export LANG=en");
   for (int i = 4; i < infoArray.length; i++) {
    String r1 = telnet.sendCommand(infoArray[i]);
    System.out.println(r1);
   }
   telnet.disconnect();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 /**
  * 登陆
  *
  * @param user
  * @param password
  */
 public void login(String user, String password) {
  readUntil("login:");
  write(user);
  readUntil("Password:");
  write(password);
  readUntil(prompt + " ");
 }

 /**
  * 读取返回字符串,以确定该命令已执行完毕
  *
  * @param pattern
  * @return
  */
 public String readUntil(String pattern) {
  try {
   char lastChar = pattern.charAt(pattern.length() - 1);
   StringBuffer sb = new StringBuffer();
   char ch = (char) in.read();
   while (true) {
    sb.append(ch);
    if (ch == lastChar) {
     if (sb.toString().endsWith(pattern)) {
      return sb.toString();
     }
    }
    ch = (char) in.read();
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  return null;
 }

 // 写入
 private void write(String value) {
  try {
   out.println(value);
   out.flush();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 /**
  * 命令发送
  *
  * @param command
  * @return
  */
 public String sendCommand(String command) {
  try {
   // 切换root
   if (command.startsWith("su root")) {
    write("su root");
    readUntil(":");
    String passwd=command.replaceAll("su root ", "");
    System.out.println(passwd);
    write(passwd);
    prompt = '#';
    return readUntil(prompt + " ");
   } else {

    write(command);
    return readUntil(prompt + " ");
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  return null;
 }

 /**
  * 断开连接
  */
 public void disconnect() {
  try {
   telnet.disconnect();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值