elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Crear proxy web. Fallo reenviar información.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Crear proxy web. Fallo reenviar información.  (Leído 3,789 veces)
beker

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Crear proxy web. Fallo reenviar información.
« en: 9 Agosto 2010, 12:44 pm »

Buenas

En un proyecto que tengo entre manos estoy preparando un servidor proxy en java, donde evidentemente tendré datos de entrada por un puerto, y que posteriormente reenviaré tal como llegaron a otra dirección y puerto en concreto.

Actualmente me encuentro un poco atascado porque originalmente para capturar los
datos que se recivian por el socket lo hacía con un algoritmo complicado
con un in.read() pero por defecto read se queda unos segundos esperando
mientras no recibe TODOS los datos del socket antes de cerrarlo y eso me
esta dando algunos problemas y para más adelante sería más engorroso de
manejar(os pongo parte del codigo):

Código
  1. byte[] buffer = new byte[4096];
  2. int saved = 0;
  3. int len;
  4.  
  5.               for (;;) {
  6.  
  7.                if (done) {
  8.                    break;
  9.                }
  10.  
  11.                len = buffer.length;
  12.  
  13.                // Used to be 1, but if we block it doesn't matter
  14.                // however 1 will break with some servers, including apache
  15.                if (len == 0) {
  16.                    len = buffer.length;
  17.                }
  18.                if (saved + len > buffer.length) {
  19.                    len = buffer.length - saved;
  20.                }
  21.                int len1 = 0;
  22.                while (len1 == 0) {
  23.                    try {
  24.                        len1 = in.read(buffer, saved, len);
  25.                    } catch (Exception ex) {
  26.                        if (done && (saved == 0))
  27. {System.out.println("INICIO5555:");
  28.                            break a;
  29.                        }
  30.                        len1 = -1;
  31.                        break;
  32.                    }
  33.                }
  34.                len = len1;
  35.                if ((len == -1) && (saved == 0)) {
  36.                    break;
  37.                }
  38.                if (len == -1) {
  39.                    done = true;
  40.                }
  41.  
  42.                // No matter how we may (or may not) format it, send it
  43.                // on unformatted - we don't want to mess with how its
  44.                // sent to the other side, just how its displayed
  45.                if ((out != null) && (len > 0)) {
  46.                    //slowLink.pump(len);
  47.                    out.write(buffer, saved, len);
  48.                }
  49.  
  50.  
  51.                xmltextAUX = xmltextAUX + new String(buffer, 0, len);
  52.  
  53.            }
  54.  

En xmltextAux se almacena en forma de cadena todos los bytes recividos
gracias al byte[] buffer = new byte[4096];...

Ahora estoy intentando pasar éste codigo a otro que utiliza funciones más
avanzadas(y sin espera) asi que todo lo anterior se resumiria en algo
similar a ésto:


Código:
    InputStreamReader ir = new InputStreamReader(in);
            BufferedReader r = new BufferedReader(ir);
            while ((xmltextAUX = r.readLine()).trim().length() > 0) {
                xmltext = xmltext + xmltextAUX;
            }
            System.out.println("MENSAJE:" + xmltext);

            if ((out != null) && (xmltext.length() > 0)) {
                System.out.println("INICIO8:");
                //slowLink.pump(len);
                //DataOutputStream dout = new DataOutputStream(out);
                //dout.writeBytes(xmltext);
                //Charset charset = Charset.forName("ISO-8859-1");
                PrintWriter p = new PrintWriter(out, true);
                p.write(xmltext);
                //out.write(xmltext.getBytes(charset));
            }

La parte de recibir por el socket de entrada el mensaje lo lee exactamente
igual que la otra funcion, pero a la hora de escribir lo que se ha
recibido por él para enviarlo por el socket "out" de salida algo falla
porque es como si no se enviara nada.

La mayor diferencia y donde creo que reside el problema es que en el
codigo antiguo el mensaje se recibia como una serie de bytes[] y se
enviaba directamente como los bytes[] que eran; y en la nueva version
vamos leyendo línea a línea como un string y luego lo mandamos como un
string y puede que haya algún problema de conversión, o de formato o algo
así que no se interpreta correctamente por el servidor.

Un saludo chicos y muchas gracias de antemano por leer tanta parrafada :)


« Última modificación: 10 Agosto 2010, 10:12 am por Debci » En línea

Aeros

Desconectado Desconectado

Mensajes: 199


Ver Perfil
Re: Crear proxy web. Fallo reenviar información.
« Respuesta #1 en: 10 Agosto 2010, 09:58 am »

inserta codigo en java :D


En línea

beker

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Crear proxy web. Fallo reenviar información.
« Respuesta #2 en: 10 Agosto 2010, 10:07 am »

inserta codigo en java :D

¿? El código que he puesto en el post es java, podría poner el código de toda la clase, pero vamos, de la versión que funciona, a la que no, sólo cambian las partes que están citadas.

Un saludo!
En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Crear proxy web. Fallo reenviar información.
« Respuesta #3 en: 10 Agosto 2010, 10:15 am »

inserta codigo en java :D
Al parece con un solo bucle no captas toda la info, o el contenedor es demasiado pequeño, te recomiendo cojer la salida de todo lo que entra y analizar (debuggearlo vamos :P)

Es lo que me parece ver, pero es primera hora de la mañana y no estoy muy fino, luego te lo pruebo y demas.

Saludos
En línea

beker

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Crear proxy web. Fallo reenviar información.
« Respuesta #4 en: 10 Agosto 2010, 10:31 am »

inserta codigo en java :D
Al parece con un solo bucle no captas toda la info, o el contenedor es demasiado pequeño, te recomiendo cojer la salida de todo lo que entra y analizar (debuggearlo vamos :P)

Es lo que me parece ver, pero es primera hora de la mañana y no estoy muy fino, luego te lo pruebo y demas.

Saludos

En el codigo inicial tiene un bucle infinito con for(;;) y en el inferior también tiene un bucle con while ((xmltextAUX = r.readLine()).trim().length() > 0) donde se queda leyendo hasta que no hay más información en el socket...
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Crear un bat que valide informacion de un archivo
Scripting
dablind 1 2,522 Último mensaje 11 Diciembre 2010, 19:09 pm
por leogtz
Un fallo en Dropbox expone la información de sus usuarios
Noticias
wolfbcn 0 1,501 Último mensaje 21 Junio 2011, 13:04 pm
por wolfbcn
Un fallo de seguridad en los 'smartphones' HTC compromete información de sus ...
Noticias
wolfbcn 0 1,741 Último mensaje 4 Octubre 2011, 02:37 am
por wolfbcn
Información para crear una web .
Desarrollo Web
anonimo12121 5 3,872 Último mensaje 28 Febrero 2012, 10:53 am
por Graphixx
Crear AP y Analizar la informacion
Hacking
markspitz15 1 2,573 Último mensaje 7 Agosto 2012, 10:22 am
por adastra
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines