[SOLUCIONADO] ¿Cómo recibir y mandar datos desde Android a la PC c/programación?

  • 5 Respuestas
  • 4343 Vistas

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

Desconectado proxy_lainux

  • *
  • Underc0der
  • Mensajes: 125
  • Actividad:
    10%
  • Reputación 0
  • belial grimoire
    • Ver Perfil
hola

Estoy tratando de crear un cliente-servidor entre un celular android y linux en PC, ya logré hacer la conexión, puedo mandar y recibir datos o en este caso, "cadenas de texto", tal vez estoy muy acostumbrado a C, pero como recordaran, con una conexión ya realizada se puede empezar a comunicar los sockets.

Bueno, ya logre esa comunicación, pero no se si funcione de la misma manera con Java, hasta el momento hago la conexión y mando un "hola" de android a la PC, y después mando alguna frase de la PC a android, pero aquí viene mi problema.

Al principio había dejado un botón y un textview para ver si se estaba realizando la conexión y la información se mandaba correctamente, y todo va bien, oprimo el botón para mandar un string desde android a la PC y después puedo volver a recibir otra cadena de caracteres desde la compu hacia android, etc, el clásico recv y send.

Pero como mencioné, tengo que oprimir un botón para poder mandar datos constantemente desde android a la PC y asi lograr mandar datos desde la PC a android nuevamente, y me gustaría poder mandar y recibir datos sin tener que oprimir nada en el celular.

Por ejemplo, me gustaría que cuando la aplicación en andriod se inicie, me mande una frase de "conexion aceptada", después yo mandar un frase de "hola", y android me mande otra cosa y así continuamente hasta que se termine la conexión. Para eso necesito saber como mantener la conexión activa y android reciba y mande información sin oprimir algo.

Traté de quitar el listener del botón y poner el socket en onCreate directamente, pero se detiene la aplicación, lo que quiere decir que así no funciona, ¿alguien me podría decir como realizar esa función, mantener la conexión activa y poder interactuar automáticamente con android?

Les dejo el código que encontré, lo he estado estudiando y modificando varias cosas para entender las cosas. A ver si me pueden explicar como realizar lo que necesito o como podría hacerlo de otra manera

Código: Java
  1. package com.clint;
  2.  
  3. import java.io.DataInputStream;
  4. import java.io.DataOutputStream;
  5. import java.io.IOException;
  6. import java.net.Socket;
  7. import java.net.UnknownHostException;
  8.  
  9. import android.support.v7.app.ActionBarActivity;
  10. import android.os.Bundle;
  11. import android.os.StrictMode;
  12. import android.view.View;
  13. import android.widget.Button;
  14. import android.widget.EditText;
  15. import android.widget.TextView;
  16.  
  17. public class MainActivity extends ActionBarActivity {
  18.    
  19.    EditText textOut;
  20.    TextView textIn;
  21.  
  22.    @Override
  23.    protected void onCreate(Bundle savedInstanceState) {
  24.       super.onCreate(savedInstanceState);
  25.       setContentView(R.layout.activity_main);
  26.      
  27.       textOut = (EditText)findViewById(R.id.textout);
  28.         Solo los usuarios pueden ver los links. Registrate o Ingresar buttonSend = (Solo los usuarios pueden ver los links. Registrate o Ingresar)findViewById(R.id.send);
  29.         textIn = (TextView)findViewById(R.id.textin);
  30.         buttonSend.setOnClickListener(buttonSendOnClickListener);
  31.    }
  32.  
  33.    Solo los usuarios pueden ver los links. Registrate o Ingresar.OnClickListener buttonSendOnClickListener = new Solo los usuarios pueden ver los links. Registrate o Ingresar.OnClickListener(){
  34.  
  35.       @Override
  36.       public void onClick(Solo los usuarios pueden ver los links. Registrate o Ingresar arg0) {
  37.        // TODO Auto-generated method stub
  38.        Solo los usuarios pueden ver los links. Registrate o Ingresar socket = null;
  39.        Solo los usuarios pueden ver los links. Registrate o Ingresar dataOutputStream = null;
  40.        Solo los usuarios pueden ver los links. Registrate o Ingresar dataInputStream = null;
  41.  
  42.        try {
  43.         socket = new Solo los usuarios pueden ver los links. Registrate o Ingresar("192.168.0.17", 8888);
  44.         dataOutputStream = new Solo los usuarios pueden ver los links. Registrate o Ingresar(socket.getOutputStream());
  45.         dataInputStream = new Solo los usuarios pueden ver los links. Registrate o Ingresar(socket.getInputStream());
  46.         dataOutputStream.writeUTF("hola");
  47.         textIn.setText(dataInputStream.readUTF());
  48.        } catch (Solo los usuarios pueden ver los links. Registrate o Ingresar e) {
  49.         // TODO Auto-generated catch block
  50.         e.printStackTrace();
  51.        } catch (Solo los usuarios pueden ver los links. Registrate o Ingresar e) {
  52.         // TODO Auto-generated catch block
  53.         e.printStackTrace();
  54.        }
  55.        finally{
  56.         if (socket != null){
  57.          try {
  58.           socket.close();
  59.          } catch (Solo los usuarios pueden ver los links. Registrate o Ingresar e) {
  60.           // TODO Auto-generated catch block
  61.           e.printStackTrace();
  62.          }
  63.         }
  64.  
  65.         if (dataOutputStream != null){
  66.          try {
  67.           dataOutputStream.close();
  68.          } catch (Solo los usuarios pueden ver los links. Registrate o Ingresar e) {
  69.           // TODO Auto-generated catch block
  70.           e.printStackTrace();
  71.          }
  72.         }
  73.  
  74.         if (dataInputStream != null){
  75.          try {
  76.           dataInputStream.close();
  77.          } catch (Solo los usuarios pueden ver los links. Registrate o Ingresar e) {
  78.           // TODO Auto-generated catch block
  79.           e.printStackTrace();
  80.          }
  81.         }
  82.        }
  83.       }};
  84.       }
  85.  
« Última modificación: Febrero 12, 2015, 04:10:03 am por Gabriela »

Desconectado WhiZ

  • *
  • Underc0der
  • Mensajes: 395
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
Lo primero que haría es crear un sistema cliente-servidor. En el servidor creas un socket que se quede a la espera del cliente. Cuando el cliente se conecte creas un thread para esa comunicación y, por medio de un bucle la mantenes hasta que un evento determinado lo finalice.

Saludos!
WhiZ
« Última modificación: Enero 03, 2015, 12:59:32 am por WhiZ »


Desconectado proxy_lainux

  • *
  • Underc0der
  • Mensajes: 125
  • Actividad:
    10%
  • Reputación 0
  • belial grimoire
    • Ver Perfil
pues la conexion ya la tengo, la hago mediante un socket en java en la consola de linux, y en android la aplicación ya se establece y puedo mantener el intercambio de datos, lo que no entiendo es como realizar eso de forma automatica, me imagino que es como dices con algun hilo, pero no entiendo como.

pondré un ejemplo en C sobre lo que busco

en código se utiliza un ciclo en este caso un while en el cliente y servidor

Código: C
  1. whie(1){
  2.  
  3. send(socket, "frase", tamaño, 0);
  4.  
  5. recv(socket, buffer, espacio, 0);
  6.  
  7. Solo los usuarios pueden ver los links. Registrate o Ingresar("%s", buffer);
  8.  
  9. }

ahora uno del servidor

Código: C
  1. while(1){
  2.  
  3. recv(socket, buffer, espacio, 0);
  4.  
  5. if(Solo los usuarios pueden ver los links. Registrate o Ingresar(buffer, "whoami"){
  6.  
  7. send(socket, "android", tamaño,0);
  8. }
  9.  
  10. }


Esto que escribí es muy tonto, así que no lo traten de decifrar o arreglar jeje.

pero es un ejemplo de lo que quisiera hacer, decirle desde linux un comando o funcion a realizar, android al recibirlo haga lo que le pido, y mande el resultado de nuevo a linux.

Como pueden ver en el código de android, puedo hacerlo, siempre y cuando oprima un boton, y quisiera dejarlo sin eso... ¿como lo harían?

Desconectado WhiZ

  • *
  • Underc0der
  • Mensajes: 395
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
Acá te dejo un simple sistema cliente-servidor.

SERVER
Código: Java
  1. /* Server */
  2. import java.net.*;
  3. import java.io.*;
  4.  
  5. class Server {
  6.     public static void main(Solo los usuarios pueden ver los links. Registrate o Ingresar[] args) {
  7.         Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" <ul class="bbc_list"><li type="disc"> Running server...");[/li][/list]
  8.         Solo los usuarios pueden ver los links. Registrate o Ingresar server;
  9.         int port = 2236;
  10.  
  11.         try {
  12.             server = new Solo los usuarios pueden ver los links. Registrate o Ingresar(port);
  13.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="square"> OK");[/li][/list]
  14.  
  15.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="disc"> Waiting for clients on port " + server.getLocalPort());[/li][/list]
  16.             Solo los usuarios pueden ver los links. Registrate o Ingresar sock = server.accept();
  17.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="square"> New client: " + sock.getRemoteSocketAddress());[/li][/list]
  18.  
  19.             Solo los usuarios pueden ver los links. Registrate o Ingresar input = new Solo los usuarios pueden ver los links. Registrate o Ingresar(sock.getInputStream());
  20.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="disc"> Receiving data..." + input.readUTF());[/li][/list]
  21.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="square"> OK");[/li][/list]
  22.  
  23.             Solo los usuarios pueden ver los links. Registrate o Ingresar output = new Solo los usuarios pueden ver los links. Registrate o Ingresar(sock.getOutputStream());
  24.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="disc"> Sending data...");[/li][/list]
  25.             output.writeUTF("Visit and join us at http://underc0de.org <img src="https://underc0de.org/foro/Smileys/default/wink.gif" alt=";&#41;" title="Guiñar" class="smiley" />");
  26.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="square"> OK");[/li][/list]
  27.  
  28.             sock.close();
  29.         }
  30.         catch (Solo los usuarios pueden ver los links. Registrate o Ingresar e) {
  31.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" [!] Error: " + e);
  32.         }
  33.     }
  34. }

CLIENT
Código: Java
  1. /* Client */
  2.  
  3. import java.net.*;
  4. import java.io.*;
  5.  
  6. class Client {
  7.     public static void main(Solo los usuarios pueden ver los links. Registrate o Ingresar[] args) {
  8.         Solo los usuarios pueden ver los links. Registrate o Ingresar server = "127.0.0.1";
  9.         int port = 2236;
  10.         Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="disc"> Connecting to the server [" + server + ":" + port + "]");[/li][/list]
  11.  
  12.         try {
  13.             Solo los usuarios pueden ver los links. Registrate o Ingresar client = new Solo los usuarios pueden ver los links. Registrate o Ingresar(server, port);
  14.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="square"> OK");[/li][/list]
  15.  
  16.             Solo los usuarios pueden ver los links. Registrate o Ingresar output = new Solo los usuarios pueden ver los links. Registrate o Ingresar(client.getOutputStream());
  17.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="disc"> Sending data...");[/li][/list]
  18.             output.writeUTF("Hello!");
  19.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="square"> OK");[/li][/list]
  20.  
  21.             Solo los usuarios pueden ver los links. Registrate o Ingresar input = new Solo los usuarios pueden ver los links. Registrate o Ingresar(client.getInputStream());
  22.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="disc"> Receiving data..." + input.readUTF());[/li][/list]
  23.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="square"> OK");[/li][/list]
  24.  
  25.             client.close();
  26.         }
  27.         catch (Solo los usuarios pueden ver los links. Registrate o Ingresar e) {
  28.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" [!] Error: " + e);
  29.         }
  30.     }
  31. }

Con esto ya tenés un servidor que espera, automáticamente (me refiero, sin botones o cualquier otro evento), una conexión entrante.
En un rato subo el código con el bucle que te comentaba antes para lograr una interacción más dinámica.

Espero que esto te sirva de base para continuar.

Saludos!
WhiZ



EDITO: Ahora sí. Esta sería una versión más avanzada, con un bucle en el server que espera conexiones entrantes. Una vez iniciada una nueva conexión, se la pasa a la clase ThreadServerHandler quién se encarga del resto. El cliente sigue igual.

SERVER
Código: Java
  1. /* Server */
  2. import java.net.*;
  3. import java.io.*;
  4.  
  5. class Server {
  6.     public static void main(Solo los usuarios pueden ver los links. Registrate o Ingresar[] args) {
  7.         Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="disc"> Running server...");[/li][/list]
  8.         Solo los usuarios pueden ver los links. Registrate o Ingresar server;
  9.         int port = 2236;
  10.  
  11.         try {
  12.             server = new Solo los usuarios pueden ver los links. Registrate o Ingresar(port);
  13.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="square"> OK");[/li][/list]
  14.  
  15.             while (true) {
  16.                 Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="disc"> Waiting for clients on port " + server.getLocalPort());[/li][/list]
  17.                 Solo los usuarios pueden ver los links. Registrate o Ingresar sock = server.accept();
  18.  
  19.                 Solo los usuarios pueden ver los links. Registrate o Ingresar t = new ThreadServerHandler(sock);
  20.                 t.start();
  21.             }
  22.  
  23.         } catch(SocketTimeoutException e) {
  24.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" [!] Error: " + e);
  25.  
  26.         } catch (Solo los usuarios pueden ver los links. Registrate o Ingresar e) {
  27.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" [!] Error: " + e);
  28.         }
  29.     }
  30. }
  31.  
  32. class ThreadServerHandler extends Solo los usuarios pueden ver los links. Registrate o Ingresar {
  33.     private Solo los usuarios pueden ver los links. Registrate o Ingresar sock = null;
  34.  
  35.     public ThreadServerHandler(Solo los usuarios pueden ver los links. Registrate o Ingresar sock) {
  36.         super("ThreadServerHandler");
  37.         this.sock = sock;
  38.     }
  39.  
  40.     public void run() {
  41.         try {
  42.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="square"> New client: " + sock.getRemoteSocketAddress());[/li][/list]
  43.  
  44.             Solo los usuarios pueden ver los links. Registrate o Ingresar input = new Solo los usuarios pueden ver los links. Registrate o Ingresar(sock.getInputStream());
  45.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="disc"> Receiving data..." + input.readUTF());[/li][/list]
  46.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="square"> OK");[/li][/list]
  47.  
  48.             Solo los usuarios pueden ver los links. Registrate o Ingresar output = new Solo los usuarios pueden ver los links. Registrate o Ingresar(sock.getOutputStream());
  49.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="disc"> Sending data...");[/li][/list]
  50.             output.writeUTF("Visit and join us at http://underc0de.org <img src="https://underc0de.org/foro/Smileys/default/wink.gif" alt=";&#41;" title="Guiñar" class="smiley" />");
  51.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="square"> OK");[/li][/list]
  52.  
  53.             sock.close();
  54.         }
  55.         catch (Solo los usuarios pueden ver los links. Registrate o Ingresar e) {
  56.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" [!] Error: " + e);
  57.         }
  58.     }
  59. }

Lo que tendrías que hacer ahora es modificar la clase ThreadServerHandler: poner un bucle que reciba y envíe información hasta que por medio de un evento determinado, finalice la conexión. Los cambios que hagas en dicha clase deberán acompañarse de las modificaciones respectivas en el cliente.

Espero que te sirva!

Saludos!
WhiZ

P.D.: Seguro que más tarde subo un nuevo código, así practico un poco de java jeje
« Última modificación: Enero 03, 2015, 11:54:40 am por WhiZ »


Desconectado proxy_lainux

  • *
  • Underc0der
  • Mensajes: 125
  • Actividad:
    10%
  • Reputación 0
  • belial grimoire
    • Ver Perfil
Gracias, ya estoy comprendiendo... llevo poco tiempo en Java así que tendré que revisarlo para practicar, porque yo había hecho un cliente pero bastante desordenado jeje

Muchas gracias nuevamente, ya solo falta ver como lo integro en Android para hacer lo que mencionas, estuve googleando sobre los hilos y con tu ejemplo ya comprendí sobre Run, ya solo me falta leer bastante la documentación de oracle porque si me falta por aprender cosas de Java.

Ojala sigas subiendo más cosas, les entiendo mejor jeje

Saludos.

Desconectado WhiZ

  • *
  • Underc0der
  • Mensajes: 395
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
Bueno, acá te dejo una de las últimas versiones (mis conocimientos en java no dan para mucho más jeje).

SERVER
Código: Java
  1. /* Server */
  2. import java.net.*;
  3. import java.io.*;
  4.  
  5. class Server {
  6.     public static void main(Solo los usuarios pueden ver los links. Registrate o Ingresar[] args) {
  7.         Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" <ul class="bbc_list"><li type="disc"> Running server...");[/li][/list]
  8.         Solo los usuarios pueden ver los links. Registrate o Ingresar server;
  9.         int port = 2236;
  10.  
  11.         try {
  12.             server = new Solo los usuarios pueden ver los links. Registrate o Ingresar(port);
  13.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="square"> OK");[/li][/list]
  14.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="disc"> Waiting for clients on port " + server.getLocalPort());[/li][/list]
  15.  
  16.             while (true) {
  17.                 Solo los usuarios pueden ver los links. Registrate o Ingresar sock = server.accept();
  18.  
  19.                 Solo los usuarios pueden ver los links. Registrate o Ingresar t = new ThreadServerHandler(sock);
  20.                 t.start();
  21.             }
  22.  
  23.         } catch(SocketTimeoutException e) {
  24.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" [!] Error: " + e);
  25.  
  26.         } catch (Solo los usuarios pueden ver los links. Registrate o Ingresar e) {
  27.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" [!] Error: " + e);
  28.         }
  29.     }
  30. }
  31.  
  32. class ThreadServerHandler extends Solo los usuarios pueden ver los links. Registrate o Ingresar {
  33.     private Solo los usuarios pueden ver los links. Registrate o Ingresar sock = null;
  34.  
  35.     public ThreadServerHandler(Solo los usuarios pueden ver los links. Registrate o Ingresar sock) {
  36.         super("ThreadServerHandler");
  37.         this.sock = sock;
  38.     }
  39.  
  40.     public void run() {
  41.         try {
  42.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println("\n </li><li type="square"> New client: " + sock.getRemoteSocketAddress());[/li][/list]
  43.  
  44.             while (true) {
  45.                
  46.                 // Receiving data
  47.                 Solo los usuarios pueden ver los links. Registrate o Ingresar input = new Solo los usuarios pueden ver los links. Registrate o Ingresar(sock.getInputStream());
  48.                 Solo los usuarios pueden ver los links. Registrate o Ingresar data = input.readUTF();
  49.  
  50.                 Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println("\n </li><li type="disc"> Receiving data..." + data);[/li][/list]
  51.                 Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="square"> OK");[/li][/list]
  52.  
  53.                 // Sending data
  54.  
  55.                 Solo los usuarios pueden ver los links. Registrate o Ingresar output = new Solo los usuarios pueden ver los links. Registrate o Ingresar(sock.getOutputStream());
  56.                 Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="disc"> Sending data..." + data);[/li][/list]
  57.                 output.writeUTF(data);
  58.                 Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="square"> OK");[/li][/list]
  59.  
  60.                 // Exit
  61.                 if (data.equals("exit")) {
  62.                     Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println("\n </li><li type="disc"> Closing connection to host " + sock.getRemoteSocketAddress());[/li][/list]
  63.                     sock.close();
  64.                     break;
  65.                 }
  66.             }
  67.         }
  68.         catch (Solo los usuarios pueden ver los links. Registrate o Ingresar e) {
  69.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" [!] Error: the connection with host " +
  70.                 sock.getRemoteSocketAddress() + " has been lost");
  71.         }
  72.     }
  73. }

CLIENT
Código: Java
  1. /* Client */
  2.  
  3. import java.net.*;
  4. import java.io.*;
  5. import java.util.Scanner;
  6.  
  7. class Client {
  8.     public static void main(Solo los usuarios pueden ver los links. Registrate o Ingresar[] args) {
  9.         Solo los usuarios pueden ver los links. Registrate o Ingresar server = "127.0.0.1";
  10.         int port = 2236;
  11.         Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="disc"> Connecting to the server [" + server + ":" + port + "]");[/li][/list]
  12.  
  13.         try {
  14.             Solo los usuarios pueden ver los links. Registrate o Ingresar client = new Solo los usuarios pueden ver los links. Registrate o Ingresar(server, port);
  15.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="square"> OK");[/li][/list]
  16.  
  17.             while (true) {
  18.                 // Input
  19.                 Solo los usuarios pueden ver los links. Registrate o Ingresar.out.print("\n [?] Command: ");
  20.                 Scanner scan = new Scanner(Solo los usuarios pueden ver los links. Registrate o Ingresar.in);
  21.                 Solo los usuarios pueden ver los links. Registrate o Ingresar data = scan.nextLine();
  22.                 data.trim();
  23.  
  24.                 // Sending data
  25.                 Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="disc"> Sending data..." + data);[/li][/list]
  26.                 Solo los usuarios pueden ver los links. Registrate o Ingresar output = new Solo los usuarios pueden ver los links. Registrate o Ingresar(client.getOutputStream());
  27.                 output.writeUTF(data);
  28.                 Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="square"> OK");[/li][/list]
  29.  
  30.                 // Receiving data
  31.                 Solo los usuarios pueden ver los links. Registrate o Ingresar input = new Solo los usuarios pueden ver los links. Registrate o Ingresar(client.getInputStream());
  32.                 data = input.readUTF();
  33.                 Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="disc"> Receiving data..." + data);[/li][/list]
  34.                 Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="square"> OK");[/li][/list]
  35.  
  36.                 // Exit
  37.                 if (data.equals("exit")) {
  38.                     Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println("\n </li><li type="disc"> Closing connection...");[/li][/list]
  39.                     client.close();
  40.                     break;
  41.                 }
  42.             }
  43.         }
  44.         catch (Solo los usuarios pueden ver los links. Registrate o Ingresar e) {
  45.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" [!] Error: " + e);
  46.         }
  47.     }
  48. }

Faltaría que modifiques el servidor para que trate a cada dato recibido como un comando, es decir, que lo envíe como comando al sistema y, finalmente, devuelva la respuesta al cliente (seguro que en un rato lo hago). Con eso ya tendrías una remote shell. Si querés obtener algo mejor y más actualizado, tenés que invertir los roles, es decir, hacer que el cliente reciba los comandos, los ejecute en el sistema y envíe de vuelta la respuesta al servidor (con eso lograrías una reverse shell ;) ).

Saludos!
WhiZ


Bueno, última edición. Acá te dejo la remote shell. Con este código podrás ejecutar comandos de forma remota. Sólo te queda hacerlo reverse  :)

SERVER
Código: Java
  1. /* Server */
  2. import java.net.*;
  3. import java.io.*;
  4.  
  5. class Server {
  6.     public static void main(Solo los usuarios pueden ver los links. Registrate o Ingresar[] args) {
  7.         Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="disc"> Running server...");[/li][/list]
  8.         Solo los usuarios pueden ver los links. Registrate o Ingresar server;
  9.         int port = 2236;
  10.  
  11.         try {
  12.             server = new Solo los usuarios pueden ver los links. Registrate o Ingresar(port);
  13.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="square"> OK");[/li][/list]
  14.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="disc"> Waiting for clients on port " + server.getLocalPort());[/li][/list]
  15.  
  16.             while (true) {
  17.                 Solo los usuarios pueden ver los links. Registrate o Ingresar sock = server.accept();
  18.  
  19.                 Solo los usuarios pueden ver los links. Registrate o Ingresar t = new ThreadServerHandler(sock);
  20.                 t.start();
  21.             }
  22.  
  23.         } catch(SocketTimeoutException e) {
  24.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" [!] Error: " + e);
  25.  
  26.         } catch (Solo los usuarios pueden ver los links. Registrate o Ingresar e) {
  27.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" [!] Error: " + e);
  28.         }
  29.     }
  30. }
  31.  
  32. class ThreadServerHandler extends Solo los usuarios pueden ver los links. Registrate o Ingresar {
  33.     private Solo los usuarios pueden ver los links. Registrate o Ingresar sock = null;
  34.  
  35.     public ThreadServerHandler(Solo los usuarios pueden ver los links. Registrate o Ingresar sock) {
  36.         super("ThreadServerHandler");
  37.         this.sock = sock;
  38.     }
  39.  
  40.     public void run() {
  41.         try {
  42.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println("\n </li><li type="square"> New client: " + sock.getRemoteSocketAddress());[/li][/list]
  43.  
  44.             while (true) {
  45.                
  46.                 // Receiving data
  47.                 Solo los usuarios pueden ver los links. Registrate o Ingresar input = new Solo los usuarios pueden ver los links. Registrate o Ingresar(sock.getInputStream());
  48.                 Solo los usuarios pueden ver los links. Registrate o Ingresar data = input.readUTF();
  49.  
  50.                 Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println("\n </li><li type="disc"> Receiving data from " + [/li][/list]
  51.                     sock.getRemoteSocketAddress() + "..." + data);
  52.                 Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="square"> OK");[/li][/list]
  53.  
  54.                 // Exit
  55.                 if (data.equals("exit")) {
  56.                     Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println("\n </li><li type="disc"> Closing connection to host " + sock.getRemoteSocketAddress());[/li][/list]
  57.                     Solo los usuarios pueden ver los links. Registrate o Ingresar output = new Solo los usuarios pueden ver los links. Registrate o Ingresar(sock.getOutputStream());
  58.                     output.writeUTF(data);
  59.                     sock.close();
  60.                     break;
  61.                 }
  62.  
  63.                 // Running the command
  64.                 Solo los usuarios pueden ver los links. Registrate o Ingresar stdout = runCmd(data);
  65.  
  66.                 // Sending data
  67.  
  68.                 Solo los usuarios pueden ver los links. Registrate o Ingresar output = new Solo los usuarios pueden ver los links. Registrate o Ingresar(sock.getOutputStream());
  69.                 Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="disc"> Sending data to " + [/li][/list]
  70.                 sock.getRemoteSocketAddress() + "...");
  71.                 output.writeUTF(stdout);
  72.                 Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="square"> OK");[/li][/list]
  73.  
  74.             }
  75.  
  76.         } catch (Solo los usuarios pueden ver los links. Registrate o Ingresar e) {
  77.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" [!] Error: the connection with host " +
  78.                 sock.getRemoteSocketAddress() + " has been lost");
  79.         }
  80.     }
  81.  
  82.     public Solo los usuarios pueden ver los links. Registrate o Ingresar runCmd(Solo los usuarios pueden ver los links. Registrate o Ingresar cmd) {
  83.         try {
  84.             Solo los usuarios pueden ver los links. Registrate o Ingresar line = null;
  85.             StringBuilder builder = new StringBuilder();
  86.             builder.append("\n\n");
  87.  
  88.             Solo los usuarios pueden ver los links. Registrate o Ingresar p = Solo los usuarios pueden ver los links. Registrate o Ingresar.getRuntime().exec(cmd);
  89.             p.waitFor();
  90.          
  91.             Solo los usuarios pueden ver los links. Registrate o Ingresar stdout = new Solo los usuarios pueden ver los links. Registrate o Ingresar(new Solo los usuarios pueden ver los links. Registrate o Ingresar(p.getInputStream()));
  92.  
  93.             while ((line = stdout.readLine()) != null) {
  94.                 builder.append(line);
  95.                 builder.append(Solo los usuarios pueden ver los links. Registrate o Ingresar.getProperty("line.separator"));
  96.             }
  97.  
  98.             return builder.toString();
  99.  
  100.         } catch (Solo los usuarios pueden ver los links. Registrate o Ingresar e) {
  101.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" [!] Error: " + e);
  102.             return "";
  103.  
  104.         } catch (Solo los usuarios pueden ver los links. Registrate o Ingresar e) {
  105.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" [!] Keyboard Interrupt");
  106.             return "";
  107.         }
  108.     }
  109. }

CLIENT
Código: Java
  1. /* Client */
  2.  
  3. import java.net.*;
  4. import java.io.*;
  5. import java.util.Scanner;
  6.  
  7. class Client {
  8.     public static void main(Solo los usuarios pueden ver los links. Registrate o Ingresar[] args) {
  9.         Solo los usuarios pueden ver los links. Registrate o Ingresar server = "127.0.0.1";
  10.         int port = 2236;
  11.         Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="disc"> Connecting to the server [" + server + ":" + port + "]");[/li][/list]
  12.  
  13.         try {
  14.             Solo los usuarios pueden ver los links. Registrate o Ingresar client = new Solo los usuarios pueden ver los links. Registrate o Ingresar(server, port);
  15.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="square"> OK");[/li][/list]
  16.  
  17.             while (true) {
  18.                 // Input
  19.                 Solo los usuarios pueden ver los links. Registrate o Ingresar.out.print("\n [?] Command: ");
  20.                 Scanner scan = new Scanner(Solo los usuarios pueden ver los links. Registrate o Ingresar.in);
  21.                 Solo los usuarios pueden ver los links. Registrate o Ingresar data = scan.nextLine();
  22.                 data.trim();
  23.  
  24.                 // Sending data
  25.                 Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="disc"> Sending data..." + data);[/li][/list]
  26.                 Solo los usuarios pueden ver los links. Registrate o Ingresar output = new Solo los usuarios pueden ver los links. Registrate o Ingresar(client.getOutputStream());
  27.                 output.writeUTF(data);
  28.                 Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="square"> OK");[/li][/list]
  29.  
  30.                 // Receiving data
  31.                 Solo los usuarios pueden ver los links. Registrate o Ingresar.out.print(" </li><li type="disc"> Receiving data...");[/li][/list]
  32.                 Solo los usuarios pueden ver los links. Registrate o Ingresar input = new Solo los usuarios pueden ver los links. Registrate o Ingresar(client.getInputStream());
  33.                 data = input.readUTF();
  34.                 Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(data);
  35.                 Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" </li><li type="square"> OK");[/li][/list]
  36.  
  37.                 // Exit
  38.                 if (data.equals("exit")) {
  39.                     Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println("\n </li><li type="disc"> Closing connection...");[/li][/list]
  40.                     client.close();
  41.                     break;
  42.                 }
  43.             }
  44.         }
  45.         catch (Solo los usuarios pueden ver los links. Registrate o Ingresar e) {
  46.             Solo los usuarios pueden ver los links. Registrate o Ingresar.out.println(" [!] Error: " + e);
  47.         }
  48.     }
  49. }

Espero que te sirva y que puedas llevar a cabo con éxito tu proyecto.

Saludos!
WhiZ
« Última modificación: Enero 03, 2015, 04:18:25 pm por WhiZ »


 

[SOLUCIONADO] ¿Kali Linux o Kali Linux Ligth ?

Iniciado por worq

Respuestas: 2
Vistas: 24525
Último mensaje Noviembre 21, 2017, 12:28:54 pm
por Codig0Bit
[SOLUCIONADO] Multiuploader de imagenes con mysql, hosting de imagenes con mysql

Iniciado por graphixx

Respuestas: 4
Vistas: 11322
Último mensaje Marzo 26, 2013, 05:42:58 pm
por Xt3mP
[SOLUCIONADO] Linux Mint, errores, errores y mas errores...

Iniciado por n1sendev

Respuestas: 12
Vistas: 14286
Último mensaje Noviembre 22, 2017, 06:50:55 am
por RuidosoBSD
[SOLUCIONADO] Problem al instalar Windows "cualquier windows"

Iniciado por Made

Respuestas: 7
Vistas: 8515
Último mensaje Septiembre 03, 2012, 04:53:08 pm
por Made
[SOLUCIONADO] Ayuda urgente con Virus "Virus.Win32Sality"

Iniciado por Napsters

Respuestas: 6
Vistas: 13601
Último mensaje Junio 11, 2012, 03:38:18 am
por Satyricon