在远程计算机中运行命令的 Web 应用程序

Web app that runs commands in remote machine

我想开发一个 Web 应用程序,它可以向远程主机运行 "ping" 或 "telnet" 等命令。 该应用程序应该可以从任何机器访问。

例如,我应该能够从任何地方打开到我家用 PC 的 telnet 会话。 请我需要想法而不是代码。

public class Ping extends HttpServlet{  
    public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException{
        Process p = Runtime.getRuntime().exec("ping google.com");

        BufferedReader inputStream = new BufferedReader(
            new InputStreamReader(p.getInputStream()));

        String res=""; 
        String s = ""; while ((s = inputStream.readLine()) != null) {res=res+s+"\n";}

        request.setAttribute( "test", res );

        this.getServletContext().getRequestDispatcher( "/WEB-INF/test.jsp" ).forward( request, response );
    }
}

将您的网络应用分成两部分,一部分负责与浏览器交互,另一部分负责实际工作。

  1. 前端生成HTML(可能使用JSP,因为你使用的是Java)和

    • 一个标记为 'ping' 的按钮,当按下该按钮时,发送一个表单并显示 ping 结果
    • 标签为 'telnet' 的文本输入和标签为 'send' 的按钮,当按下按钮时,发送表单并显示命令的输出
  2. 后端是 Java 代码,根据请求实际执行 'ping' 或 'telnet',并捕获结果,以便可以通过前端。尽管您可以通过 Java 实现这两种协议,但启动现有的 ping 和 ssh 客户端可能要容易得多(ssh = 安全 telnet;应该 使用 telnet),重定向它们输出到一个文件,return文件的内容。

第 2 部分根本不需要知道它在第 1 部分中被使用 - 它是纯 Java 代码实现类似

public static String ping(String ip, int timeoutMs) {
   // returns ping output as a String, or error if timeout reached
}

public static String telnet(String ip, int port, String command, int timeoutMs) {
   // returns output of ssh -c command to chosen ip:port
   // must have public-key login to chosen machine for this to work 
   //   without password prompts
   // returns error description if timeout reached 
}