1

我想为用户添加 telnet 到我的应用程序的功能,他们可以在其中输入命令等。我想要一个简单的 Java Telnet 服务器,我可以提供身份验证策略。

通过“telnet”,我指的不是什么 lib 提供 telnet 连接,而是更多。我想要一个带有钩子的 shell 来完成无聊的协议内容,我可以使用这些钩子来处理和执行命令行。这些命令在哪里或是什么,当然是我的实现。

这个 q 不是关于如何启动套接字服务器或其他协议管道类型。

4

3 回答 3

1

根据我的经验,telnet 是 telnet,ssh 是 ssh ......如果你想要后者,那么你可能会看:http: //mina.apache.org/sshd/

不过我从来没用过。

您还可以使用本机操作系统 SSH(如果有)进行隧道传输,然后在服务器上运行常规 telnet。如果它只是一个自定义命令外壳,那么创建您自己的 telnet 访问一点也不复杂。正如另一张海报所提到的,有一些图书馆可以让它变得简单。

...但是 ssh 会更安全,更直接。

于 2010-02-22T02:51:01.650 回答
0

Telnet 服务器只做 telnet。

您可能会发现http://telnetd.sourceforge.net/合适。

“目标受众:希望将合理的 telnet 访问集成到他们的应用程序中的开发人员。”

于 2010-02-22T02:28:57.050 回答
0

“telnet 进入我的应用程序,他们可以在其中输入命令等”到底是什么意思?

由于 telnet 和 ssh 都需要在远程机器上运行一些应用程序(通常是命令 shell 的实例),它们实际上只提供命令的传输机制。尤其是 Telnet 可以(并且已经)被滥用来通过 tcp 连接发送一般文本命令。您可以使用命令浏览网页telnet www.target-domain.com 80并手动输入所有 http 协议内容,但我不推荐它。ssh 也一样,尽管它为通道增加了 ssl/tls 安全性。

因此,我猜你想要的是这样的:

import java.io.*;
import java.net.*;

public class telnettest {
    public static void main(String[] args) throws IOException {

        Socket echoSocket = null;
        PrintWriter out = null;
        BufferedReader in = null;

        try {
            //Open a listening socket on port 8022 and wait for a connection
            echoSocket = new ServerSocket(8022).accept();
            System.out.println("connection established");

            //Get input and output streams
            out = new PrintWriter(echoSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(
                        echoSocket.getInputStream()));
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for "
                    + "the connection");
            System.exit(1);
        }

        //Read lines from the input stream (corresponding to user commands)
        String userInput;
        while ((userInput = in.readLine()) != null) {

            //For each line entered, just output it to both remote and local terminal
            out.println("echo: " + userInput);
            System.out.println("echo: " + userInput);
        }

        //Clean up connections.
        out.close();
        in.close();
        echoSocket.close();
    }
}

这是本教程示例的无耻编辑。

我不确定 ssh 登录,但我怀疑您可以使用 javax.net.ssl.SSLServerSocket 而不是 ServerSocket 到达那里。

剩下的就是对用户输入做一些明智的事情,而不是仅仅把它扔回他们的脸上。根据命令的数量及其参数,您可以自己解析命令,也可以找到为您处理它的库。

于 2010-06-19T13:29:29.177 回答