Comunicación por red, capturar tramas completas

Iniciado por zonahurbana, 1 Junio 2015, 18:14 PM

0 Miembros y 2 Visitantes están viendo este tema.

zonahurbana

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.
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

zonahurbana

Cita de: engel lex en  1 Junio 2015, 18:21 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.
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...

engel lex

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

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.