Reputation: 2404
I've a target machine(*nix based) which is connected to my machine(local to my pc). I want to execute some commands on this target.
So, I'm using Java socket to achieve the same.
socket = new Socket("100.200.400.300", 23, null, 0 );
remote local
Here, after the above line -
socket.isConnected() returns true.
Now, I've I/O streams of this Socket object and I'm doing -
while((string = bufferedReader.readLine()) != null) {
outputStream.write(string .getBytes());
outputStream.flush(); }
Buffered reader to read commands from a local file and write to the socket object for execution on the target machine. Below code to read from Socket -
while((myIntVar = is.read()) != -1) {
//Below line prints some junk data ... hash, updaward arrow and spaces and then
// loop hangs to raise a Socket I/O exception.
System.out.println((char) i);
stringBuffer.append((char) i);}
Here, my understanding is that, as I already have the socket connection established, I can just pass my commands and those commands should get executed on the other side(correct me if am wrong).
But this is not working. I'm getting junk characters as I've mentioned above and there is one more thing - I'm not passing username and password for establishing the socket connection - do I've to pass it as we do for telnet(how...? am lost here).
And, just for info - the above code is all that I've(no server or client code as mentioned in various other threads) .
Upvotes: 0
Views: 339
Reputation: 16198
Telnet does not quite use raw sockets as you have. Telnet has special ways of end lines and ending messages. You will need to work out the correct protocol to use, there are actually several varying implementations of telnet. It may be easier to use a library.
An easy work around would be to filter any character that does not fall in the correct ascii range we want.
private static String cleanMessage(String in) {
StringBuilder sb = new StringBuilder();
for (Character i : in.toCharArray()) {
int charInt = i.hashCode();
if (charInt >= 32 && charInt <= 126) {
sb.append(i);
}
}
return sb.toString();
}
The Apache Commons library has an implement of Telnet handling, with an example here
Upvotes: 1