<分区>
我在一家大型组织工作,该组织支持全国网络上的许多不同站点。我们的供应商为我们在每个站点使用的硬件提供诊断工具。通过 Telnet 访问诊断和报告。
问题是我们想同时监控所有站点,而目前我们一次只能检查一个站点(通过telnet)。
我已经构建了将使用 Runtime.exec(String)
向每个 IP 地址发送 ping 命令的东西。但现在我希望能够使用供应商的诊断和报告工具自动发送特定命令。关于执行此操作的最佳方法的任何想法?请注意,我们有一个混合系统 - 有些站点在防火墙后面,有些则没有。一个完整的解决方案将是理想的,但我也会满足于部分解决方案。
是否可以像获取 Runtime.exec(String)
返回的 Process 对象的输入和输出流一样简单,并将我的命令发送到输入并读取输出的响应?或者我应该连接到端口 23(通常的 telnet 端口)然后像任何其他客户端-服务器系统一样运行。还是其他完全不同的东西?
我正在继续尝试,此时只是集思广益...
代码:(已删除敏感信息)
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);
//}