当前位置: 首页 > 面试题库 >

发送远程登录命令并使用Java读取响应

梅玉堂
2023-03-14
问题内容

已关闭 。这个问题需要更加集中。它当前不接受答案。

想改善这个问题吗? 更新问题,使其仅通过编辑此帖子来关注一个问题。

2年前关闭。

改善这个问题

我在一个支持全国性网络上许多不同站点的大型组织中工作。我们的供应商为我们在每个站点使用的硬件提供诊断工具。诊断和报告可通过Telnet访问。

问题是我们想同时监视 所有 站点,当前我们只能一次(通过telnet)一次检查它们。

我已经构建了一些东西,Runtime.exec(String)用来将ping命令发送到每个IP地址。但是现在,我希望能够使用供应商的诊断和报告工具自动发送特定命令。关于最佳方法的任何想法吗?注意我们有一个混合系统-
有些站点位于防火墙后面,有些则不在。完整的解决方案将是理想的选择,但我也会选择部分解决方案。

是否可以简单地获取由返回的Process对象的输入和输出流,Runtime.exec(String)并将我的命令发送到输入并读取输出的响应?还是我应该连接到端口23(通常的telnet端口),然后像其他任何客户端-
服务器系统一样运行。还是其他完全不同的东西?

我正在继续尝试,现在就在头脑风暴。

CODE :(已删除敏感信息)

void exec(String ip)
{
  Socket sock = null;
  BufferedReader br = null;
  PrintWriter pw = null;

  try
  {
    sock = new Socket(ip, 23);

    br = new BufferedReader(new InputStreamReader(sock.getInputStream()));
    pw = new PrintWriter(sock.getOutputStream());

    this.read(br);
    System.out.println("Sending username");
    pw.println("username");
    this.read(br);  // Always blocks here
    System.out.println("Sending password");
    pw.println("password");
    this.read(br);

    pw.close();
    br.close();
    sock.close();
  }
  catch(IOException e)
  {
    e.printStackTrace();
  }
}

void read(BufferedReader br) throws IOException
{
  char[] ca = new char[1024];
  int rc = br.read(ca);
  String s = new String(ca).trim();

  Arrays.fill(ca, (char)0);

  System.out.println("RC=" + rc + ":" + s);

//String s = br.readLine();
//      
//while(s != null)
//{
//  if(s.equalsIgnoreCase("username:"))
//    break;
//          
//  s = br.readLine();
//          
//  System.out.println(s);
//}

问题答案:

您为什么不简单地使用Socket系统?

在端口23上打开所选服务器的套接字,然后从此处发送您自己的命令。

这是一个简单的例子:

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

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

        try {
            pingSocket = new Socket("servername", 23);
            out = new PrintWriter(pingSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(pingSocket.getInputStream()));
        } catch (IOException e) {
            return;
        }

        out.println("ping");
        System.out.println(in.readLine());
        out.close();
        in.close();
        pingSocket.close();
    }
}

资源:

  • oracle.com-有关套接字的所有信息


 类似资料:
  • 问题内容: 我正在寻找一种简单的方法来获取位于远程服务器上的文件。为此,我在Windows XP上创建了本地ftp服务器,现在我想为测试Applet提供以下地址: 当然,我会收到以下错误: URI方案不是“文件” 我一直在尝试其他方法来获取文件,但它们似乎没有用。我该怎么办?(我也很想执行HTTP请求) 问题答案: 您不能使用ftp开箱即用。 如果文件位于http上,则可以执行以下操作: 如果要使

  • 我正在尝试设置一个类,以便我可以通过ssh连接到远程服务器(我有IP、用户名和密码),然后发送类似“echo”test“”的命令,然后接收回输出(例如,“test”)。我用JSch来做这个,但我不知道怎么做。 我不知道该怎么办,连接后我卡住了。 非常感谢您的建议。

  • 我试图写我的第一个每一个Android应用程序连接到我的树莓派和控制我的DSLR使用gphoto2库。我目前有一个非常粗糙的应用程序,有两个按钮,一个“连接”按钮和一个“捕获”按钮。 我可以连接到我的raspberry pi,但如果不使用以下命令从连接部分调用它,我无法将jsch会话传递到“捕获”按钮: 我希望代码使用“连接”按钮通过ssh连接,然后能够使用“捕获”按钮尽可能多次地拍照。欢迎任何问

  • 我正在进行一个开发,向远程web服务发送请求,并使用获得响应。 在本例中,我使用下面提到的WSDl的成功地生成了客户端wsdl2java代码。 示例WSDL URL: 在做了一些研究之后,我创建了下面的示例代码,用于向其中定义的web服务发送SOAP请求,并使用生成的客户机代码获得apache Camel的响应。 我只想向远程web服务发送一个SOAP请求,并使用apache Camel获得响应。

  • 我在做一个不和谐机器人,它会改变频道的特定名称 代码 .然后(newChannel= 而且我对不和谐也很陌生。js(一个月前开始)

  • 我有一个简单的Hadoop安装有点麻烦。我已经下载了hadoop 2.4.0并安装在一个CentOSLinux节点(虚拟机)上。我已经为apache站点(http://hadoop.apache.org/docs/r2.4.0/hadoop-project-dist/hadoop-common/SingleCluster.html)上描述的具有伪分布的单个节点配置了hadoop。它从日志中没有问题