远程采集服务器信息,比如说磁盘信息、内存信息。

现介绍java通过telnet执行命令采集服务器信息,比如说执行df、ls、top。

这里在linux环境通过root或者其他用户登录执行解析方式有点出入,下面是代码

/**
* Telnet远程会话
*
*/
public class TelnetSession implements IRemoteSession { private TelnetClient telnet = new TelnetClient("VT220"); private InputStream in; private NodeInfoVO nodeInfoVO; private PrintStream out; private char prompt = '$';// 普通用户结束 /**
*
* 构造函数
* @param serverBean
*/
public TelnetSession(NodeInfoVO nodeInfoVO) {
try {
telnet.connect(nodeInfoVO.getServerIp(), DeviceConstants.TELNET_DEFAULT_PORT);
in = telnet.getInputStream();
out = new PrintStream(telnet.getOutputStream());
// 根据root用户设置结束符
this.prompt = nodeInfoVO.getServerUserName().equals("root") ? '#' : '>';
login(nodeInfoVO.getServerUserName(), nodeInfoVO.getServerPassword());
} catch (Exception e) {
e.printStackTrace();
}
} /**
* @return 获取 serverBean属性值
*/
public NodeInfoVO getNodeInfoVO() {
return nodeInfoVO;
} /**
* 登录
*
* @param user
* @param password
*/
public void login(String user, String password) {
readUntil("login:");
write(user);
readUntil("assword:");
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)) {
byte[] temp = sb.toString().getBytes("iso8859-1");
return new String(temp, "GBK");
}
}
ch = (char) in.read();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 读取分析结果
*
* @param pattern
* @return
*/
public String readResultUntil(String pattern) {
BufferedReader inputStream = null;
try {
// char lastChar = pattern.charAt(pattern.length() - 1);
// StringBuffer sb = new StringBuffer();
// Thread.sleep(1000);
// final Scanner sc = new Scanner(in, "iso8859-1");
//
// while (sc.hasNextLine()) {
// String ss=sc.nextLine();
// if(ss.contains("mmc")){
// System.out.println("---------");
// //return null;
// }
// byte[] temp = ss.toString().getBytes("iso8859-1");
// System.out.println(new String(temp, "GBK"));
// }
//
// sc.close();
inputStream = new BufferedReader(new InputStreamReader(in));
String line = inputStream.readLine();
while (inputStream.ready()) {
System.out.println(line);
line = inputStream.readLine();
}
inputStream.close(); } catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (inputStream != null)
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
} /**
* 写操作
*
* @param value
*/
public void write(String value) {
try {
out.println(value);
out.flush();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 向目标发送命令字符串
*
* @param command
* @return
*/
public String execCommand(String command) {
try {
write(command);
return readUntil(prompt + "");
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 关闭连接
*/
@Override
public void close() {
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);
try {
telnet.disconnect();
} catch (Exception e) {
telnet = null;
} finally {
telnet = null;
}
} public static void main(String[] args) {
// TelnetSession she = null;
// try {
// she = new TelnetSession(new ServerBean("10.10.5.183", 23, "comtop", "comtophello"));
// System.out.println(she.execCommand("wmic path win32_operatingsystem get TotalVisibleMemorySize,"
// + "TotalVirtualMemorySize ,FreePhysicalMemory,FreeVirtualMemory"));
// } catch (Exception e) {
// she.disconnect();
// } finally {
// she.disconnect();
// }
} }

远程采集服务器指标信息(二)通过telnet执行远程命令的更多相关文章

  1. windows服务器提权前请先执行systeminfo命令

    pr.巴西烤肉 对应补丁 好多朋友见到Windows服务器就祭出pr.巴西烤肉一气搞,忙完免杀又忙找可写目录,最后发现服务器打上了对应的补丁.笔者在提权前都会执行systeminfo命令,查看对应补丁 ...

  2. salt-api 获取服务器信息,minion批量执行cmd命令

    import requests import json try: import cookielib except: import http.cookiejar as cookielib # 使用url ...

  3. 远程管理服务器--批量管理服务器,vps

    一般大型的企事业单位都有自己的服务器,但是服务器一般都放在机房,辐射较大,噪音大,如何能有效的避免这一情况呢?哈哈,那就来个远程桌面,远程操作服务器吧. 一.使用 iis7远程连接管理工具工具下载官网 ...

  4. Windows操作系统远程Linux服务器传输文件方法(以EasyDSS云平台、EasyNVR上传部署为例)

    本文转自博客:https://blog.csdn.net/black_3717/article/details/79769406 问题背景: 之前给客户部署我们一款EasyDSS云平台(配合EasyN ...

  5. linux系列(二十三):df命令

    1.命令格式 df [选项] [文件] 2.命令功能 显示指定磁盘文件的可用空间.如果没有文件名被指定,则所有当前被挂载的文件系统的可用空间将被显示.默认情况下,磁盘空间将以 1KB 为单位进行显示, ...

  6. CentOS服务器安装Telnet来远程连接服务器

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 一.前言 在连接远程服务器时有很多种连接方式,如SSH.telnet.SFTP等.但是如果大家在docker上面安装gitlab做 ...

  7. telnet执行过程及验证远程服务器是否打开

    telnet执行过程: 工作原理: 当你用Telnet登录进入远程计算机系统时,你事实上启动了两个程序,一个 叫Telnet客户程序,它运行在你的本地机上:另一个叫Telnet服务器程序,它运 行在你 ...

  8. windows客户端如果通过cmd窗口连接到远程linux服务器,可以使用telnet;

     linux系统打开telnet端口的方法 2016-03-11 16:02:25 标签:linux telnet 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明. ...

  9. orange pi pc 体验(二)远程登录服务器

    1.本人的板子是orangepi  pc,安装的debian系统 2.启动完成后,默认可以用xshell登录板子的,使用nano更改/etc/apt/source.list root@OrangePI ...

  10. python远程登录服务器(paramiko模块安装和使用)

    转自:http://www.jb51.net/article/46285.htm 一:简介 由paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器 ...

随机推荐

  1. 【长文】带你搞明白Redis

    本文使用第一人称来介绍Redis 一.概述 Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化 ...

  2. JS的JSON.parse问题

    这个问题,已经有非常多人说过,而且由来已久. 大家都提供了不少的解决方法,但是都不够彻底. 一)现在是什么情况 1.使用SpringMvc+ModelAndView+jsp传递值 由于业务需要,通过m ...

  3. CentOS上安装telnet

    客户端 yum -y intall telnet 服务端 yum -y install xinetd #telnet服务依赖于xinetd yum -y install telnet-server # ...

  4. CLR via C# 笔记 -- 计算限制的异步操作(27)

    1. 线程池基础. 创建和销毁线程是一个昂贵的操作,要耗费大量时间.太多的线程会浪费内存资源.由于操作系统必须调度可运行的线程并执行上下文切换,所以大多的线程还对性能不利.为了改善这个情况,CLR包含 ...

  5. mysql+redis点赞功能剖析

    最近在一个应用上需要用到点赞的功能,因为点赞的功能比较常用,很多人看到了大拇指就点了上去,如果单单采用mysql的方式的话可以会对数据库造成很大的压力. 我看了下网上一些博主的提供的解决方案,主要以m ...

  6. 配置 Nginx + PHP(FastCGI/FPM)

    有关概念 Nginx是什么 Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器. Php-fpm是什么 1.c ...

  7. 写给rust初学者的教程(三):闭包、智能指针、并发工具

    这系列RUST教程一共三篇.这是最后一篇,介绍RUST语言的进阶概念.主要有闭包.智能指针.并发工具. 上一篇:写给rust初学者的教程(二):所有权.生存期 closure "闭包&quo ...

  8. Java 集合框架迭代器(Iterator)

    什么是迭代器 使用循环遍历集合 普通for循环 for(int i=0;i<10;i++){} 增强for循环 for(String str:list){} 什么是迭代器Iterator Ite ...

  9. Java-Request对象是用来回去请求信息,得到页面的请求

    1.Request 1.1 request对象和response对象的原理(了解) request对象和response对象是由服务器创建的,我们来使用他们即可 request对象是用来回去请求信息, ...

  10. SeaweedFS + TiKV 部署保姆级教程

    在使用 JuiceFS 时,我们选择了 SeaweedFS 作为对象存储,以及 TiKV 作为元数据存储,目前在 SeaweedFS 上已经存储了近1.5PB 的数据.关于 SeaweedFS 和 T ...