论坛首页 Java企业应用论坛

利用apache commons-net 开源包,使用telnet方式获取AIX主机信息

浏览 10495 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-07-25  

/***

** QQ:252574345

** MSN:lele_love_lomboz@hotmail.com

***/

 

 

一。AIX简介

 

AIX全名为Advanced Interactive Executive,俗称“An IBM uniX”或“Advanced IBM uniX”。

作为综合评价第一的unix操作系统(D.H. Brown咨询公司,1998 ),AIX是真正的第二代unix,具有性能卓越、易于使用、扩充性强、适合企业关键应用等众多特点。

支持300种以上的IBM软件和超过13000家独立软件厂商的软件产品。

是非常优秀的操作系统

在银行、电力系统、电信移动等企业应用很广泛

下面,我们介绍下对AIX系统的信息采集

二。

下面是一个利用apache commons-net 开源包, 使用telnet方式连接的工具类

实现对AIX主机信息的采集

因为提示符已经写死了,如果采用本例,请先按照自己的真实环境修改提示符和用户名和密码 等基本信息

 

 

package test.collector.telnet;

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

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

/**
 * 利用apache net 开源包,使用telnet方式获取AIX主机信息
 * @author zhaoyl
 * @date 20008.7.21
 * @version 1.2
 */
public class NetTelnet {

 //Telnet对象
 private TelnetClient telnet = new TelnetClient();
   
 
 private InputStream in;

 private PrintStream out;
   
 //提示符。具体请telnet到AIX主机查看
 private char prompt = '#';
    //telnet端口
 private String port;
    //用户
 private String user;
    //密码
 private String password;
    //IP地址
 private String ip;

 public NetTelnet() {
  
  try {
   //AIX主机IP
   this.ip = "10.1.2.222";
   this.password = "loeisdke";
   this.user = "whdiwpasdq232sd2323";
   this.port = "23";
   telnet.connect(ip, Integer.parseInt(port));

   in = telnet.getInputStream();
   out = new PrintStream(telnet.getOutputStream());
            //登录
   readUntil("login: ");
   write(user);
   readUntil("Password: ");
   write(password);
   readUntil(prompt + " ");
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 /**
  * 读取分析结果
  * @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;
 }

 /**
  * 写
  * @param value
  */
 public void write(String value) {
  try {
   out.println(value);
   out.flush();

  } catch (Exception e) {
   e.printStackTrace();
  }
 }

    /**
     * 向目标发送命令字符串
     * @param command
     * @return
     */
 public String sendCommand(String command) {
  try {
   write(command);
   return readUntil(prompt + " ");
  } catch (Exception e) {
   e.printStackTrace();
  }
  return null;
 }
   
 /**
  * 关闭连接
  *
  */
 public void disconnect() {
  try {
   telnet.disconnect();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 public static void main(String[] args) {
  try {
   NetTelnet telnet = new NetTelnet();
   //通过aix的命令“查找主机名称”获取数据
   //命令是 "hostname"
   //不熟悉命令的参考<<AIX网络管理手册>>
   String result = telnet.sendCommand("hostname");
   
   System.out.println(result);
   //最后一定要关闭
   telnet.disconnect();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

   发表时间:2008-09-24  
我有一个问题,当我用readUntil("login:")时,while循环里边的判断满足判断后并没有return 出来
而是会一直读数据,造成了死循环。
这是为什么啊?
0 请登录后投票
   发表时间:2008-09-24  
    if (ch == lastChar) {
     if (sb.toString().endsWith(pattern)) {
      return sb.toString();
     }

请先debug,2个条件是否都满足了
我刚才在aix低版本,5版本下测试都没问题
具体问题在贴出来,一起看看
0 请登录后投票
   发表时间:2008-09-24  
问题已经解决了
我测试的HP的UNIX服务器,我为了看到执行的过程
则System.out.println(readUntil("login:"))、System.out.println(readUntil("Password:"))等信息,所以导致了很大的内存被吃掉了,把这些语句屏蔽掉就没有问题了。


0 请登录后投票
   发表时间:2008-09-24  
ok,问题解决就好了,呵呵我也学到了点
0 请登录后投票
   发表时间:2008-09-24  
1 可以先export PS1=YOUR_PATTERN
2 持有这个链接很不稳定,耗资源,所以用nohup...
0 请登录后投票
   发表时间:2008-09-25  
嗯,楼上正解,确实如此。这个只是个demo
0 请登录后投票
   发表时间:2008-10-25  
哪里能下载到那个开源包?
0 请登录后投票
   发表时间:2008-10-25  
我在这里面找到啦.
http://commons.apache.org/downloads/download_net.cgi
0 请登录后投票
   发表时间:2008-10-25  
我怎么连接不上啊?
java.net.ConnectException: Connection refused: connect
报了这个错.我关闭所有防火墙与杀毒软件啦.
IP和账号我也都改啦.不过我关闭了guest账号,不知道哦啊有影响吗?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics