【问题标题】:Using ProcessBuilder to read/write to telnet process使用 ProcessBuilder 读取/写入 telnet 进程
【发布时间】:2015-07-20 05:43:34
【问题描述】:

我正在尝试通过ProcessBuilder 从/向telnet 进程读取/写入值。

 public static void main(String[] args) {
        try {
            telnetProcess = new ProcessBuilder("C:\\Windows\\System32\\telnet.exe","x.x.x.x").start();
            telnetInputReader = new BufferedReader(new InputStreamReader(telnetProcess.getInputStream()));
            telnetOuputWriter = new BufferedWriter(new OutputStreamWriter(telnetProcess.getOutputStream()));
            expectPattern("login:");
            sendCmd("user");
            expectPattern("password:");
            sendCmd("pwd");
            expectPattern("switch>#");
            sendCmd("exit");
            expectPattern("Connection to host lost");
        } catch (IOException ex) {
            System.out.println("Exception : " + ex);
        }
    }

我收到以下错误

java.io.IOException: Cannot run program "C:\Windows\System32\telnet.exe": CreateProcess error=2, The system cannot find the file specified

我尝试将文件路径更改为 unix 格式的样式,例如 C:/Windows/System32/telnet.exe,但没有成功。 (虽然我预计它不会工作)。然后将telnet.exe 从它的位置复制到其他用户的主目录,我没有收到任何错误。 (???)

但是,我没有看到预期的输出。我没有从该过程中得到任何响应,并且代码退出了。

    public static void sendCmd(String cmd) {
        System.out.println(cmd);
        try {
            telnetOuputWriter.write(cmd + "\n", 0, cmd.length());
        } catch (IOException ex) {
            Logger.getLogger(TelnetProcessHandler.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public static String expectPattern(String pattern) {
        String cmdResponse = "";
        try {
            String line = "";
            // Always getting 'null' here
            while ((line = telnetInputReader.readLine()) != null) {
                System.out.println(line);
                cmdResponse += line;
                if (line.contains(pattern)) {
                    break;
                }
            }
        } catch (IOException ex) {
            System.out.println("ex : " + ex);
        }
        return cmdResponse;
    }

这有什么问题?然后,另一个查询。我曾尝试使用PrintWriter 写入进程,其中又包含BufferedWriter,例如,

telnetOuputWriter = new PrintWriter(new BufferedWriter(new OutputStreamWriter(telnetProcess.getOutputStream())));

在这种情况下使用PrintWriter 可以吗?

注意:由于某些原因,我想坚持使用进程方式的telnet,而不是SocketTelnetClientexpect4j

【问题讨论】:

    标签: java telnet processbuilder printwriter


    【解决方案1】:

    telnet 程序不使用标准输入输出流与用户通信,它需要直接使用控制台设备。你必须找到另一种方法来做你想做的事情。

    例如,您可以使用实现 telnet 协议的 Java 库。例如看这个问题:Open source Telnet Java API

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-23
      • 1970-01-01
      • 2011-03-10
      • 1970-01-01
      相关资源
      最近更新 更多