I work for a large organization that supports many different sites on a nation wide network. Our vendor supplies diagnostic tools for the hardware we use at each site. The diagnostics and reports are accessed via Telnet.
The problem is we want to monitor all sites simultaneously and currently we can only check them one at a time (via telnet).
I have already built something that will use Runtime.exec(String)
to send ping commands to each IP address. But now I want to be able to send specific commands automatically using the vendor's diagnostic and reporting tools. Any ideas on the best way to do this? NOTE we have a hybrid system - some of the sites are behind a firewall some are not. A complete solution would be ideal but I will settle for a partial one as well.
Could it be as simple as getting the input and output streams of the Process object returned by the Runtime.exec(String)
and send my commands to the input and reading the response on the output? Or should I be connecting to port 23 (the usual telnet port) and then behave as any other client-server system. Or something else completely different?
I am continuing to try things out, just brainstorming at this point...
CODE: (sensitive information removed)
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);
//}