【问题标题】:Java based Telnet Application [closed]基于 Java 的 Telnet 应用程序 [关闭]
【发布时间】:2016-01-17 07:54:12
【问题描述】:

我想创建基于 Java 的 Telnet 应用程序,它可以将 telnet 命令发送到某个服务器并捕获它的响应,在简单的命令行 Telnet 模拟器中, 请提供一些创建教程。

我看到了一些教程,它需要 java telnet 服务器和客户端,但我只需要发送命令并将 telnet 输出捕获到变量或写入文本文件

谢谢。

【问题讨论】:

  • 太宽泛了。有十几个或更多适用的 RFC,以及几个现存的实现。

标签: java telnet


【解决方案1】:

看看 Apache Commons Net TelnetClient。它可以轻松提供您需要的行为。您只需要获取TelnetClient 实例,调用connect 方法并通过Input- 和OutputStreams 使用远程服务器。 Here你可以找官方的例子,怎么用,不过有点多余,IMO。

这是here的另一个例子:

import org.apache.commons.net.telnet.TelnetClient;

import java.io.InputStream;
import java.io.PrintStream;

public class AutomatedTelnetClient {
    private TelnetClient telnet = new TelnetClient();
    private InputStream in;
    private PrintStream out;
    private String prompt = "%";

    public AutomatedTelnetClient(String server, String user, String password) {
        try {
            // Connect to the specified server
            telnet.connect(server, 23);

            // Get input and output stream references
            in = telnet.getInputStream();
            out = new PrintStream(telnet.getOutputStream());

            // Log the user on
            readUntil("login: ");
            write(user);
            readUntil("Password: ");
            write(password);

            // Advance to a prompt
            readUntil(prompt + " ");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void su(String password) {
        try {
            write("su");
            readUntil("Password: ");
            write(password);
            prompt = "#";
            readUntil(prompt + " ");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    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 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 {
            write(command);
            return readUntil(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 {
            AutomatedTelnetClient telnet = new AutomatedTelnetClient(
                    "myserver", "userId", "Password");
            System.out.println("Got Connection...");
            telnet.sendCommand("ps -ef ");
            System.out.println("run command");
            telnet.sendCommand("ls ");
            System.out.println("run command 2");
            telnet.disconnect();
            System.out.println("DONE");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

【讨论】:

  • 谢谢,成功了:)
猜你喜欢
  • 2023-03-06
  • 2013-05-20
  • 2012-12-21
  • 2018-03-18
  • 2016-02-17
  • 2012-01-30
  • 2011-11-20
  • 2012-03-14
  • 2011-02-12
相关资源
最近更新 更多