import org.apache.commons.net.telnet.TelnetClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import java.io.*; import java.net.SocketException; @Component public class TelnetUtil { private static Logger logger = LoggerFactory.getLogger(TelnetUtil.class); /** * 机器端口的连通性 * @param hostname * @param port * @param timeout * @return */ public static Boolean checkConnected(String hostname, int port, int timeout,String username,String password){ TelnetClient telnetClient = new TelnetClient("vt200"); //指明Telnet终端类型,否则会返回来的数据中文会乱码 try { telnetClient.setDefaultTimeout(timeout); telnetClient.connect(hostname,port); InputStream inputStream = telnetClient.getInputStream(); PrintStream pStream = new PrintStream(telnetClient.getOutputStream()); byte[] b = new byte[1024]; int size; StringBuffer sBuffer = new StringBuffer(300); while(true) { //读取Server返回来的数据,直到读到登陆标识,这个时候认为可以输入用户名 size = inputStream.read(b); if(-1 != size) { sBuffer.append(new String(b,0,size)); if(sBuffer.toString().trim().endsWith("login:")) { username = username + "\n"; pStream.write(username.getBytes()); pStream.flush();//将命令发送到telnet Server } if(sBuffer.toString().trim().endsWith("assword:")) { password = password + "\n"; pStream.write(password.getBytes()); pStream.flush(); break; } } } logger.info("对端机器返回:[{}]",sBuffer.toString()); String exit = "exit" + "\n"; pStream.write(exit.getBytes()); pStream.flush(); if(null != pStream) { pStream.close(); } return telnetClient.isConnected(); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try { telnetClient.disconnect(); } catch (IOException e) { e.printStackTrace(); } } return false; } public static void main(String[] args) { String hostname = "192.168.184.128"; // String hostname = "www.baidu.com"; int port = 23; int timeout = 5000; Boolean isConnected = checkConnected(hostname, port, timeout,"niuniu","123"); logger.info("telnet [{}] [{}] ==>isConnected: [{}]",hostname,port,isConnected); } }
问题:
isConnected返回为true, read 时一直报 read timeout
解决: 对端机器安装并开启telnet服务
1, sudo apt-get install openbsd-inetd
2, sudo apt-get install telnetd
3, /etc/init.d/openbsd-inetd restart