package com.Linux;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.net.SocketException;
import org.apache.commons.net.telnet.TelnetClient;
import org.junit.Assert;
/**
* commons-net-2.0.jar是工程依赖包
*/
public class NetTelnet {
TelnetClient telnet = new TelnetClient();// 初始化Telnet客户端连接
private InputStream is;
private PrintStream out;
// telnet连接初始化需要的参数
private String ip;// 远端主机IP
private int port;// telnet连接的端口号
private String user;// 用户名
private String password;// 密码
private char promopt = '$';// 命令提示符 普通用户命令以$号结束
public NetTelnet(String ip, int port, String user, String password) {
this.ip = ip;
this.port = port;
this.user = user;
this.password = password;
initLink(ip, port, user, password, promopt);
}
private void initLink(String ip, int port, String user, String password,char promopt) {
try {
telnet.connect(ip, port);// 连接到远端主机
is = telnet.getInputStream();
out=new PrintStream(telnet.getOutputStream());
// 根据是否是root用户设置命令结束符号
this.promopt = user.equals("root") ? '#' : '$';
login(user, password);
} catch (SocketException e) {
Assert.fail("可以ping通,但本机telent or xinetd服务没有启动");
} catch (IOException e) {
Assert.fail("读取远程机器显示数据出错");
//e.printStackTrace();
}
}
// 登陆主机
private void login(String user, String password) {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
//System.out.println("Timeout");
Assert.fail("连接超时");
}
readUntil("login:");// 得到远端发来的是输入用户名的指令
write(user);// 输入用户名
readUntil("Password:");
write(password);
readUntil(promopt + "");// 注意这种转化类型的用法
}
// 获取远端主机发送来的指令
public String readUntil(String pattern) {
try {
char lastChar = pattern.charAt(pattern.length() - 1);
StringBuffer sb = new StringBuffer();
char read = (char) is.read();
while (true) {
sb.append(read);
if (read == lastChar) {
if (sb.toString().contains(pattern)) {
return sb.toString();
}
}
read = (char) is.read();
}
} catch (IOException e) {
e.printStackTrace();
}
return "出错鸟";
}
// 用户发送过去的指令或者数据
public void write(String value) {
out.println(value);
out.flush();
}
// 向远程主机发送命令
public String sendCommand(String command) {
write(command);
return readUntil(promopt + "");
}
// 关闭连接
public void disConnect() {
try {
telnet.disconnect();
} catch (IOException e) {
//e.printStackTrace();
Assert.fail("关闭连接出错");
}
}
//public static void main(String[] args) {
//try {
//
//System.out.println("启动Telnet...");
//String ip = "192.168.50.148";
//int port = 23;
//String user = "root";
//String password = "11111111";
//NetTelnet telnet = new NetTelnet(ip, port, user, password);
//System.out.println("已经连接上");
//telnet.sendCommand("ps -ef |grep memcached");
//
//String r1 = telnet.sendCommand("ps -ef |grep memcached");
//String r2 = telnet.sendCommand("ps -ef |grep nginx");
//String r3 = telnet.sendCommand("ps -ef |grep php-fpm");
////String rnginx =telnet.sendCommand("ps -C nginx");
////ps -C nginx|cut -c25- (只显示一列)
//String rnginx =telnet.sendCommand("ps -C nginx|awk -- '{print $4}'");
//
//System.out.println("显示结果");
//rnginx=rnginx.trim();
//if(rnginx.contains("ngin1")){
// System.out.println("包含");
//}
//System.out.println(rnginx);
////System.out.println(r2);
////System.out.println(r3);
//telnet.disConnect();
//} catch (Exception e) {
//e.printStackTrace();
//}
//}
}
package com.Linux;
import java.net.InetAddress;
import org.junit.Test;
import static org.junit.Assert.assertThat;
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.core.StringContains.containsString;
public class Check50_148 {
@Test
public void Service5_148(){
try {
InetAddress address = InetAddress.getByName("192.168.5.148");
assertThat("Ping不通", true, is(address.isReachable(5000)));
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("启动Telnet...");
String ip = "192.168.50.148";
int port = 23;
String user = "root";
String password = "11111111";
NetTelnet telnet = new NetTelnet(ip, port, user, password);
System.out.println("已经连接上,开始进行服务检查");
String All =telnet.sendCommand("ps -A|awk -- '{print $4}'");
assertThat("xinetd服务没起来",All, containsString("xinetd\r\n"));
assertThat("nginx服务没起来",All, containsString("nginx\r\n"));
assertThat("sshd服务没起来",All, containsString("sshd\r\n"));
assertThat("redis-server服务没起来",All, containsString("redis-server\r\n"));
assertThat("php-fpm服务没起来",All, containsString("php-fpm\r\n"));
assertThat("mysqld服务没起来",All, containsString("mysqld\r\n"));
assertThat("memcached服务没起来",All, containsString("memcached\r\n"));
System.out.println("检查完毕无异常");
}
}
这事一个简单的对 linux服务器服务检查的程序
需要引入commons-net-3.1.jar , junit4.10.jar , hamcrest-core-1.3.jar , hamcrest-library-1.3.jar 第一个必须导入,后面3个如果不需要 assertthat断言的话可以去掉