代码之家  ›  专栏  ›  技术社区  ›  mP.

有人能推荐一个JavaFOSS服务器来执行所有典型的协议(ssh等)吗

  •  1
  • mP.  · 技术社区  · 16 年前

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

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

    3 回复  |  直到 15 年前
        1
  •  1
  •   PSpeed    16 年前

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

    不过,我从来没用过。

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

    …但是ssh会更安全更直接。

        2
  •  0
  •   Thorbjørn Ravn Andersen    16 年前

    Telnet服务器只做Telnet。

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

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

        3
  •  0
  •   Peter    15 年前

    由于telnet和ssh都需要一些应用程序在远程机器上运行(通常是命令shell的实例),因此它们实际上只为命令提供传输机制。Telnet尤其可以(并且已经)被滥用,通过tcp连接发送一般的文本命令。您可以使用以下命令浏览web 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。

    剩下的就是对用户的输入做一些合理的处理,而不是把它扔回他们的脸上。

    推荐文章