使用Telnet探测对端机器连通性

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值