Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: zonahurbana en 1 Junio 2015, 18:14 pm



Título: Comunicación por red, capturar tramas completas
Publicado por: zonahurbana en 1 Junio 2015, 18:14 pm
Hola.

Estudio ingeniería de sistemas y he llevado ya varios cursos, pero todo es superficial, ya que (como dicen algunos docentes) nos enseñan diversos ámbitos sin centrarse en uno en particular.

Estoy llevando un curso llamado "comunicación de datos".
En la primera unidad tuve que presentar un programa en C# que permita enviar tramas de 1 PC a otra, conectadas a través del puerto serial.

El enunciado pedía que una de las PC conectadas pueda enviar 1 archivo a la otra, y mientras esto sucedía puedan enviarse mensajes en un chat. Para ello usé una clase SerialPort. Pero adicionalmente incluí algo más, que puedan enviarse varios archivos en ambos sentidos y que aún así puedan comunicarse, además de mostrar el porcentaje de avance. También agregué que cuando uno enviaba un archivo el otro debía aceptar para recibirlo, de ser así el emisor se enteraba e iniciaba el envío. Usé las ventanas que son para abrir y guardar archivos. En otras palabras, me tomó algo de tiempo comprender el funcionamiento de hilos, eventos y delegados (aún no los conozco al 100% pero les he dado ya un uso), y todo esto a fin de no rendir el examen teórico jeje.

A todo esto, se me hizo bastante extraño que yo haya tenido que programar la aceptación del archivo.
Es decir, si no lo hacía, en la computadora destino, con solo abrir el programa se podrían estar creando varios archivos vacíos y recibiendo información de la otra PC, sin que se entere (él solo ha abierto el programa).

Yo tuve que definir "cabeceras" para las tramas y reconocer qué tipo de información se estaba recibiendo, si era una petición para que acepte un archivo, si era la extensión del archivo luego de haber aceptado, si era contenido del archivo o si era un mensaje.

Ahora que hemos avanzado a la 2da unidad hemos empezado a revisar un poco sobre el envío de tramas por red, esto es con sockets, pero en este caso estamos definiendo un protocolo y lo que nos llega es solo el contenido, mas no se tiene acceso a la cabecera que define el protocolo. En lo que entendí estamos usando el protocolo tcp/ip y como hay varios niveles en una comunicación (son 7 niveles OSI, como red, transporte, etc) se tiene una cabecera ya definida en cada nivel del protocolo, y se decodifica en el momento en que llega.

Mi pregunta es, ¿cómo puedo capturar la trama completa que viene (más allá de recubir la información central)?
Según lo que entendí, si se trata de una comunic multipunto donde mi PC es un nodo, entonces mi PC recibe una serie de tramas bajo el protocolo tcp/ip, pero simplemente "pasa de largo" ya que el destino no era mi PC sino otra. ¿Cómo puedo capturar esa información completa y guardarla/mostrarla?

Supuestamente estaría codificada y no entendería su contenido, pero sería el primer paso para comprender el contenido y "poder hacer algo con ello". ¿Verdad?

Gracias por su atención.


Título: Re: Comunicación por red, capturar tramas completas
Publicado por: engel lex en 1 Junio 2015, 18:21 pm
asumiendo que a tu computadora realmente llega el paquete (ej, wifi o una red bus) ya que el switch normalmente envía el paquete solo a donde debe llegar, tienes que levantar modo "monitor" o modo "promiscuo" en la tarjeta de red para que la misma no descarte nada, sino que acepte todo el contenido que le llegue, sin importar si le pertenece o no

el paquete siempre está codificado, pero la codificación es standard para los protocolos casi en general y aún así la data va del paquete "cruda" a menos que esté cifrado


Título: Re: Comunicación por red, capturar tramas completas
Publicado por: zonahurbana en 1 Junio 2015, 18:56 pm
[...] tienes que levantar modo "monitor" o modo "promiscuo" en la tarjeta de red para que la misma no descarte nada, sino que acepte todo el contenido que le llegue, sin importar si le pertenece o no

Gracias por responder. ¿Es posible hacer esto con alguna clase de C#?
Acabo de hacer una búsqueda sobre el modo monitor y aparecen videos de cómo hacerlo usando sofware (específicamente backtrack), pero quisiera hacerlo con alguna clase de C# o algún otro lenguaje con la intención de aprender un poco y compartirlo en clase sin usar programas.


Título: Re: Comunicación por red, capturar tramas completas
Publicado por: engel lex en 1 Junio 2015, 19:01 pm
en windows solo unos pocos programas son compatibles con un grupo muy pequeño de tarjetas para levantar modo monitor, normalmente esto se puede hacer con más compatibilidad en linux (como vez backtrack, aunque está descontinuado, pero kali tiene las herramientas para hacer eso de modo casi automatico)

realmente de windows se poco sobre ese tema, vas a tener que investigar, ya que es cosa de drivers