//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();
}
}
}