`
zhaoyl
  • 浏览: 218127 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

/***

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

分享到:
评论
11 楼 zxd7900663 2009-06-17  
问下楼主String result = telnet.sendCommand("hostname");如果发送的命令要执行很久,java代码一定要等待指令执行完了才能再执行下去么?比如telnet.sendCommand( "./run-ant.sh" )去执行编译需要很长时间,我想java代码不等他执行完直接执行下去行么?
10 楼 zhaoyl 2008-10-27  
java.net.ConnectException: Connection refused: connect

很明显连接不上 主机

建议你用try catch打印出详细错误,比较容易看出问题
9 楼 itlangqun 2008-10-25  
我怎么连接不上啊?
java.net.ConnectException: Connection refused: connect
报了这个错.我关闭所有防火墙与杀毒软件啦.
IP和账号我也都改啦.不过我关闭了guest账号,不知道哦啊有影响吗?
8 楼 itlangqun 2008-10-25  
我在这里面找到啦.
http://commons.apache.org/downloads/download_net.cgi
7 楼 itlangqun 2008-10-25  
哪里能下载到那个开源包?
6 楼 zhaoyl 2008-09-25  
嗯,楼上正解,确实如此。这个只是个demo
5 楼 yangyi 2008-09-24  
1 可以先export PS1=YOUR_PATTERN
2 持有这个链接很不稳定,耗资源,所以用nohup...
4 楼 zhaoyl 2008-09-24  
ok,问题解决就好了,呵呵我也学到了点
3 楼 chengnuoangel 2008-09-24  
问题已经解决了
我测试的HP的UNIX服务器,我为了看到执行的过程
则System.out.println(readUntil("login:"))、System.out.println(readUntil("Password:"))等信息,所以导致了很大的内存被吃掉了,把这些语句屏蔽掉就没有问题了。


2 楼 zhaoyl 2008-09-24  
    if (ch == lastChar) {
     if (sb.toString().endsWith(pattern)) {
      return sb.toString();
     }

请先debug,2个条件是否都满足了
我刚才在aix低版本,5版本下测试都没问题
具体问题在贴出来,一起看看
1 楼 chengnuoangel 2008-09-24  
我有一个问题,当我用readUntil("login:")时,while循环里边的判断满足判断后并没有return 出来
而是会一直读数据,造成了死循环。
这是为什么啊?

相关推荐

    commons-net-jar包.zip

    在这个"commons-net-jar包.zip"压缩包中,包含了两个版本的Apache Commons Net库:commons-net-3.3.jar和commons-net-3.4.jar。这两个版本虽然相差不大,但每个新版本通常会带来一些改进和修复,使得开发者能够更...

    commons-net-3.8.0-API文档-中文版.zip

    赠送jar包:commons-net-3.8.0.jar; 赠送原API文档:commons-net-3.8.0-javadoc.jar; 赠送源代码:commons-net-3.8.0-sources.jar; 赠送Maven依赖信息文件:commons-net-3.8.0.pom; 包含翻译后的API文档:...

    commons-net-3.3-API文档-中文版.zip

    赠送jar包:commons-net-3.3.jar; 赠送原API文档:commons-net-3.3-javadoc.jar; 赠送源代码:commons-net-3.3-sources.jar; 赠送Maven依赖信息文件:commons-net-3.3.pom; 包含翻译后的API文档:commons-...

    commons-net-2.0.jar TelnetClient包.rar

    TelnetClient包,TelnetClient类根据RFC 854为Telnet协议实现了简单网络虚拟终端(NVT)。它没有实现任何其他Telnet选项,因为它打算在Java程序中使用,以提供对Telnet可访问资源的自动访问。 可以通过首先使用Socket...

    apache commons-net-3.5.jar

    使用apache commons-net包实现文件ftp上传

    commons-net-3.6.jar

    在这个版本中,我们聚焦于`commons-net-3.6.jar`,它提供了丰富的API和工具,使开发者能够方便地进行FTP文件的上传、下载以及读写操作。这个库不仅简化了FTP操作,还为开发者提供了深入理解其内部工作原理的机会,...

    apache-jakarta旗下的所有开源项目jar文件

    apache-jakarta-commons-codec.jar apache-jakarta-commons-collections.jar apache-jakarta-commons-discovery.jar apache-jakarta-commons-email.jar apache-jakarta-commons-fileupload.jar apache-jakarta-...

    apache commons jar(commons所有的jar包,从官网下载提供给大家)

    1.3.1-bin commons-fileupload-1.3-bin commons-io-2.4-bin commons-jexl-1.1 commons-lang-2.6-bin commons-lang3-3.4-bin commons-launcher-1.1 commons-logging-1.2-bin ccommons-math-2.2 commons-net-...

    apache-commons-id.jar和commons-discovery-0.2.jar

    Apache Commons ID 和 Commons Discovery 是两个在Java开发中广泛使用的开源库,它们是Apache软件基金会的项目,为开发者提供了丰富的工具和功能。 Apache Commons ID 主要关注于生成唯一标识(ID)的功能,它提供...

    commons-net-3.6

    3. **commons-net-examples-3.6.jar**:包含了一些示例代码,演示了如何使用Apache Commons Net库的各种功能。这些例子是学习和快速上手的良好起点,可以帮助开发者快速理解和应用库中的函数。 此外,压缩包中还有...

    apache commons 常用jar包 commons-validator commons-transaction commons-lang等

    jar包大小:135KB commons-validator-1.3.1.jar jar包大小:93KB commons-transaction-1.2.jar jar包大小:141KB commons-scxml-0.6.jar jar包大小:254KB commons-primitives-1.0.jar jar包大小:60KB commons-pool-1.3....

    apache的FTP包commons-net-1.4.1.jar,jakarta-oro-2.0.8.jar

    Apache的FTP库是Java开发中一个非常实用的工具,它主要包含了两个核心的JAR包:`commons-net-1.4.1.jar`和`jakarta-oro-2.0.8.jar`。这两个包提供了丰富的功能,允许开发者在Java应用中实现FTP(文件传输协议)的...

    commons-net-3.6 jar包.zip

    本文将深入解析`commons-net-3.6.jar`包,了解其核心功能、使用方法以及在实际开发中的应用。 Apache Commons Net库自1999年以来就一直在为Java开发者提供服务,它的主要目标是提供一套全面且易于使用的API,用于...

    Apache commons-csv-1.6 jar

    Apache commons-csv-1.6 jar包,java7,针对csv的各种操作,需要的下载

    commons-net-3.8.0-API文档-中英对照版.zip

    赠送jar包:commons-net-3.8.0.jar; 赠送原API文档:commons-net-3.8.0-javadoc.jar; 赠送源代码:commons-net-3.8.0-sources.jar; 赠送Maven依赖信息文件:commons-net-3.8.0.pom; 包含翻译后的API文档:...

    commons-math3-3.5-API文档-中文版.zip

    赠送jar包:commons-math3-3.5.jar; 赠送原API文档:commons-math3-3.5-javadoc.jar; 赠送源代码:commons-math3-3.5-sources.jar; 赠送Maven依赖信息文件:commons-math3-3.5.pom; 包含翻译后的API文档:...

    apache commons-net-3.5

    7. **其他网络协议**:除了FTP,Apache Commons Net还支持其他网络协议,如NNTP(新闻传输协议)、SMTP(简单邮件传输协议)和Telnet等,扩展了其在网络通信中的应用范围。 8. **兼容性与稳定性**:作为Apache软件...

    commons-net-2.2-API文档-中文版.zip

    赠送jar包:commons-net-2.2.jar; 赠送原API文档:commons-net-2.2-javadoc.jar; 赠送源代码:commons-net-2.2-sources.jar; 赠送Maven依赖信息文件:commons-net-2.2.pom; 包含翻译后的API文档:commons-...

    apache commons jar(commons所有的jar包,从官网下载提供.zip

    apache commons jar(commons所有的jar包... apache-sanselan-incubating-0.97-bin bcel-5.2 commons-beanutils-1.9.2-bin commons-chain-1.2-bin commons-cli-1.3.1-bin commons-codec-1.10-bin commons-collections4-4

    Apache commons-io-2.5.jar

    "commons-io-2.5.jar"是Apache Commons IO库的一个版本,针对JDK 1.6及更高版本设计。在这个版本中,用户可以找到许多优化和增强的功能。 1. **IOUtils**: IOUtils是Apache Commons IO中的核心类之一,它提供了大量...

Global site tag (gtag.js) - Google Analytics