<dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.4</version> </dependency>
package cn.tisson.ipran.gdcsgcf.driver.client; import org.apache.commons.net.telnet.TelnetClient; import org.apache.commons.net.telnet.TelnetOptionHandler; import org.apache.commons.net.telnet.TerminalTypeOptionHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class TelCommandDriver extends CommandDriver { protected Logger log = LoggerFactory.getLogger(TelCommandDriver.class); protected TelnetClient telnetClient = null;// telnet客户端 @Override public int open(String ip, int port, String loginPrompt, String userName, String pwdPrompt, String pwd, String commandPrompt,StringBuffer resultBuf) { if(isOpen){ return 0; } if (ip == null || ip.equals("") || port < -1) { log.error("需要telnet连接的ip 或端口不正确,请校验,ip="+ip+",port="+port); return -1; } try { this.ip=ip; telnetClient = new TelnetClient(); TelnetOptionHandler optionhandler = new TerminalTypeOptionHandler( "dumb", true, true, true, true); telnetClient.addOptionHandler(optionhandler); telnetClient.setDefaultTimeout(2000000); telnetClient.connect(ip, port); telnetClient.setSoTimeout(2000000); } catch (Exception e) { resultBuf.append(e.getMessage()); close(); log.error(ip+" 打开telnet 连接出现异常,连接ip端口为" + ip + ":" + port, e); return -2; } String result=null; try { isr = new InputStreamReader(telnetClient.getInputStream(), charsetName); osr = new OutputStreamWriter(telnetClient.getOutputStream(), charsetName); result = read(loginPrompt, 30000); if (result.indexOf(loginPrompt) < 0) { close(); if(result !=null && !"".equals(result)){ resultBuf.append(ip+" 没有接收到输入用户名的提示符" + loginPrompt + "接收到的是" + result); } log.error(ip+" 没有接收到输入用户名的提示符" + loginPrompt + "接收到的是" + result); return -3; } write(userName); // add by yw 延长网元响应时间 result = read(pwdPrompt, 60000); if (result.indexOf(pwdPrompt) < 0) { close(); if(result !=null && !"".equals(result)){ resultBuf.append(ip+" 没有接收到输入密码的提示符" + pwdPrompt + "接收到的是" + result); } log.error(ip+" 没有接收到输入密码的提示符" + pwdPrompt + "接收到的是" + result); return -4; } write(pwd); result = read(commandPrompt, 30000); resultBuf.append(result); //yw 2018/4/24 if(this.isAutoAnswer){ this.write("N"); result=read(commandPrompt); resultBuf.append(result); } // write("N"); // result = read(commandPrompt, 30000); // resultBuf.append(result); if (result.indexOf(commandPrompt) < 0) { resultBuf.append(ip+" 没有接收到成功命令的提示符" + commandPrompt); log.error(ip+" 没有接收到成功命令的提示符" + commandPrompt + "接收到的是" + result); //认证失败 if(result.contains("Error")||result.contains(loginPrompt)){ close(); log.error(ip+" 认证失败接收到的是" + result); return -23; } close()