任何人都可以推荐一个执行所有典型协议(ssh等)的java FOSS服务器

时间:2010-02-22 01:12:03

标签: java telnet

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

通过“telnet”我不是指lib提供的telnet连接,而是更多的东西。我希望无聊的协议内容与一个带有钩子的shell一起完成,我可以使用它来处理和执行命令行。这些命令的位置或内容当然是我的实现。

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

3 个答案:

答案 0 :(得分:1)

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

我从来没有用过它。

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

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

答案 1 :(得分:0)

Telnet服务器只执行telnet。

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

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

答案 2 :(得分: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();
    }
}

这是this tutorial example的无耻编辑。

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

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