标题: 关于java telnet执行ls -la|more的显示下页问题
lixiaocheng
LU新生
Rank: 1



UID 92092
精华 0
积分 2
帖子 3
活跃指数 1
LU金币 4 个
LU金条 0 个
阅读权限 10
注册 2007-6-27
 
发表于 2007-6-30 16:53  资料  个人空间  短消息  加为好友 
关于java telnet执行ls -la|more的显示下页问题

使用commons-net包的org.apache.commons.net.telnet.*;
已经正常成功登录到相应主机,执行ls -la命令都可以,但是执行
ls -la|more 出现分屏显示的时候如何读取按任意键显示下一页呢,请赐教,
抛开commons-net包,java socket实现也可以,有什么好的方法
代码如下

package cn.lxc.personal.swtich;


import org.apache.commons.net.telnet.*;
import org.apache.log4j.*;
import java.io.*;

public class TelnetSwitch
{
  private TelnetClient telnet = new TelnetClient();
  private InputStream in;
  private PrintStream out;
  private char prompt = '$';
  static Logger logger = Logger.getLogger(TelnetSwitch.class.getName());
  SwitchLog4j switchlog4j = new SwitchLog4j();
  StringBuffer sbc = null;
  private static final int SWITCH=0;
  private static final int HOST=1;
  public TelnetSwitch( String server, String user, String password,int type ) {
   try {
         // Connect to the specified server
         telnet.connect( server, 23 );

         
         // Get input and output stream references
         in = telnet.getInputStream();
         out = new PrintStream( telnet.getOutputStream() );
         if(type==SWITCH){
         // Log the user on
                 readUntil( "Login: " );
                 write( user );
                 readUntil( "assword: " );
                 write( password );
         }
         else if(type==HOST){
                 readUntil( "login: " );
                 write( user );
                 readUntil( "assword: " );
                 write( password );                 
         }
                 
         // Advance to a prompt
         readUntil( prompt + " " );
         logger.info("logon successful!!!");
   }
   catch( Exception e ) {
         e.printStackTrace();
     logger.info("logon failed",e);
   }
  }

  public void secondPassword( String password ) {
    try {
      write( "en" );
      readUntil( "assword: " );
      write( password );
      prompt = '#';
      readUntil( prompt + " " );
      logger.info(password+"二次口令登录成功");
    }
    catch( Exception e ) {
      e.printStackTrace();
      logger.info(password,e);
    }
  }

  public String readUntil( String pattern ) {
           try {
                         char lastChar = pattern.charAt( pattern.length() - 1 );
                         StringBuffer sb = new StringBuffer();
                         boolean found = false;
                         char ch = ( char )in.read();
                         while( true ) {
                          System.out.print( ch );
                          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;
  }
  public String readUntilall( String pattern ) {
           try {
                         char lastChar = pattern.charAt( pattern.length() - 1 );
                         StringBuffer sb = new StringBuffer();
                         boolean found = false;
                         char ch = ( char )in.read();
                         while( true ) {
                          System.out.print( ch );
                          sb.append( ch );
                          if( ch == lastChar ) {
                            if( sb.toString().substring(sb.length()-1,sb.length()).endsWith(pattern)) {                                    
                                         return sb.toString();
                                }
                          }
                            if( sb.toString().contains("ress any key to continue")) {
                                    sendAnyKey("\u0032");
                            }
                          ch = ( char )in.read();
                         }
                          
                   }
                   catch( Exception e ) {
                         e.printStackTrace();
                   }
                   return null;
}
  public void write( String value ) {
   try {
         out.println( value );
         out.flush();
         System.out.println( value );
   }
   catch( Exception e ) {
         e.printStackTrace();
   }
  }

  public String sendCommand( String command ) {
   try {
         prompt = '#';
         write( command );
         return readUntil( prompt + " " );
   }
   catch( Exception e ) {
         e.printStackTrace();
   }
   return null;
  }
  public String  sendAnyKey( String command ) {
           try {
                 prompt = '#';
                 write( command );
                return readUntilall( 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 {
           if(args.length<4)
           {
                           logger.info("参数不够,请输入四个参数,运行参数如下 ip 用户名 密码 二次密码");
                           System.exit(1);
           }
           logger.info("发送命令开始");
           TelnetSwitch telnet = new TelnetSwitch( args[0], args[1], args[2],TelnetSwitch.SWITCH);

       telnet.secondPassword(args[3]);
       telnet.sendAnyKey("show fdb ");      
       logger.info("发送命令结束");
       telnet.disconnect();
   }
   catch( Exception e ) {
         e.printStackTrace();
   }
  }
}


顶部
老农
管理员
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
民工


LU爱心使者  
UID 2
精华 30
积分 19296
帖子 32408
活跃指数 2275
LU金币 28708 个
LU金条 0 个
阅读权限 255
注册 2003-9-16
来自 北京
 
发表于 2007-6-30 16:58  资料  个人空间  主页 短消息  加为好友  添加 老农 为MSN好友 通过MSN和 老农 交谈 QQ
干嘛任意键都显示下一页?就空格键不好么?





兄弟们,AIX高手挑战赛2008年赛即将启动!信息见这里!

专业提供IBM小机及存储技术支持、实施、维保和培训,代理备机及配件。EMAIL:allenlong68[at]hotmail.com([at]换成@)

AIX交友QQ群:24807728(群是朋友聊天用的,技术请在论坛谈。群满时,不常活动的会被请出,给新人腾位置)
QQ里谈技术没积累,是方便自己麻烦别人;在论坛里讨论,可以大家都参与,并留做参考。
技术不是简单看个文档就能提高的,多参与讨论进步快。对问题有见解的就发一下,说对了是帮助别人,说错了给机会纠正自己。
顶部
lixiaocheng
LU新生
Rank: 1



UID 92092
精华 0
积分 2
帖子 3
活跃指数 1
LU金币 4 个
LU金条 0 个
阅读权限 10
注册 2007-6-27
 
发表于 2007-6-30 17:03  资料  个人空间  短消息  加为好友 
\u0032是回车了,其实任意键都可以,现在代码效率太低

[ 本帖最后由 lixiaocheng 于 2007-6-30 17:04 编辑 ]

顶部
 



当前时区 GMT+8, 现在时间是 2009-1-9 09:48
乐悠LoveUnix论坛-京ICP备05005823号

Thanks to Discuz!  © 2001-2007    Power by LoveUnix.net
Processed in 0.058115 second(s), 6 queries , Gzip enabled

清除 Cookies - 联系我们 - 乐悠LoveUnix - Archiver