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

现介绍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. JS弱类型语言的优势——之模板字符串

    ES6中,开始支持模板字符串. 尽管Java和C#这样的高级语言有非常多吸引人的地方,但是想js这样的弱类型语言,也有独到之处. equType:有四种类型,分别是:chl.chwp.cwp.cot, ...

  2. mapreduce的shuffle机制

    1.1 概述: mapreduce中,map阶段处理的数据如何传递给reduce阶段,是mapreduce框架中最关键的一个流程,这个流程就叫shuffle:(从map的输出到reduce的输入) s ...

  3. ChiFAN 的进程表

    ChiFAN 的进程表 tip 有些题写了题解,思路做法都在里面,就只丢一个传送门了. 2023.1.9 生日蛋糕 传送门 IDA* 经过一番推式子可得,若还剩下 \(K\) 的体积,表面积为 \(2 ...

  4. FSCTF 2023(公开赛道)WP

    FSCTF 2023 ID:Mar10 Rank:6 总结:下次看到不正常报错一定重新安装一遍工具~~ web 源码!启动! 就在源码注释里 <!-- 师傅们,欢迎来到CTF的世界~ NSSCT ...

  5. MySQL 并发控制(锁得使用)

    导读 并发问题:同一时刻进行读写,并发问题回引发数据不一致问题. 解决并发问题:MySQL采用了锁定机制去解决并发问题 锁的分类 MySQL使用两种锁机制去解决问题:共享锁和排他锁,也叫读锁或者写锁. ...

  6. Mybatis Plus 3.X版本的insert填充自增id的IdType.ID_WORKER策略源码分析

    总结/朱季谦 某天同事突然问我,你知道Mybatis Plus的insert方法,插入数据后自增id是如何自增的吗? 我愣了一下,脑海里只想到,当在POJO类的id设置一个自增策略后,例如@Table ...

  7. 万维网WWW

    万维网是一个大规模的联机式信息储存场所,能方便地从一个网络站点访问另一个网络站点.万维网是一个分布式的超媒体系统. 统一资源定位符URL URL表示从互联网上得到的资源位置和访问这些资源的方法,实际上 ...

  8. 8行JS代码实现Vue穿梭框

    实现效果 完整 demo 参考 <template> <div class="contain"> <ul class=""> ...

  9. ffmpeg一些笔记: 代码调试数据

    1.AAC,MP3他的解码数据格式不支持,程序中给的是这个AV_SAMPLE_FMT_FLTP,  Screen-Cpature-Recoder的codec-id为AV_CODEC_RAW_VIDEO ...

  10. 由delete语句引起的锁范围扩大

    由delete语句引起的锁范围扩大 阿里云月报中的一句话,出处:http://mysql.taobao.org/monthly/2022/01/01/ 但是Ghost Record是可以跟正常的Rec ...