Sniffear comunicacion Serial [Solucionado, Funcional]

Iniciado por AlbertoBSD, 17 Marzo 2018, 20:07 PM

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

AlbertoBSD

Alguno conoce un buen metodo para Sniffear una comunicación Serian entre dos dispositivos mediante puerto RS232?  :huh: :huh:

El punto esta en que estoy realizando Ingeniería Inversa en el protocolo de comunicacion que utilizan 2 dispositivos que se comunican mediante cable serie.

Primero intente utilizar mi computadora como dispositivo intermedio leer todos los datos que manda el HostA y escribirlos hacia el HostB y viceversa.

El programa lo escribi en C# y parecia funcionar bien, vi parte de la comunicación entre los equipos pero llega un punto en el que al parcer por tiempo no se sincroniza bien la comunicación entre ellos y NO SE Comportan los dispositivos de la manera esperada, segun me entere el tiempo de respuesta entre ambos dispositivos no debe de superar los 20 milisegundos entre ellos. Vi el tiempo que tardaba en leer y escribir la información y este supera los 40 milisegundos.

Intente un  programa en C puro y parece ir mas rápido, pero ahora leo información de mas.
Ejemplo.

En el programa en C# leia un byte del host A al host B con valor de 100 y posteriormente leia una respuesta del host B hacia el host A con otro valor X

Y ahora con el programa de C leo hasta 5 bytes continuos con valor 100 cuando realmente conozco de antemano que solo debe de ser un byte con valor 100 seguido de la respuesta.

Alguna sugerencia con otro metodo de snifeo?

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

engel lex

te soy sincero, el tiempo de respuesta es muy alto, algo mal puedes estar haciendo, el tiempo de procesamiento de un paquete por un proxy web se considera alto si llega por encima de 1ms (incluso se puede considerar alto sobre 0.5ms) si tienes algún arduino, raspberry podrías hacer un sniffer de hardware, es decir, algo así




en caso de dudas, allí hay una web que aparentemente saben sobre eso
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.

AlbertoBSD

#2
Voy a ver que puedo realizar via Hardware tengo un Tensy board guardo.

El tema del tiempo mejoro notablemente con el programa en C, ya que C# te genera muchas clases intermedias para controlar el flujo de datos y darlo en una clase ya lista para usar.

El otro punto del Tiempo de respuesta creo que se debe a que estoy utilizando 2 adaptadores USB a RS232.

Ejemplo del log de salida del programa en C#


[09:56:03.791] COM6 bytes read:[1]: 64
[09:56:03.995] COM6 bytes read:[1]: 65
[09:56:04.010] COM4 bytes read:[1]: 01
[09:56:04.026] COM4 bytes read:[5]: FD-7D-A4-6A-F9
[09:56:04.151] COM6 bytes read:[1]: 64
[09:56:04.338] COM6 bytes read:[1]: 65
[09:56:04.338] COM4 bytes read:[1]: 01
[09:56:04.354] COM4 bytes read:[5]: FD-7D-A4-6A-F9


Pero la salida de lo anterio (un poco mas extensa) no lleva a nada ya que los dispositivos  no terminan de inicializarse y no funcionan para nada.

Ejemplo el log de salida fdel programa en C


Abrimos el puerto COM6
Abrimos el puerto COM9
COM6 Bytes[5]:  0101010101
COM9 Bytes[4]:  65656465
COM9 Bytes[5]:  6565646565
COM6 Bytes[11]: 01FD01C4A8AA4001C4A8EA
COM9 Bytes[4]:  65646565
COM6 Bytes[6]:  01FD01C4A8EA
COM9 Bytes[4]:  64656565
COM6 Bytes[6]:  01FD01C4A8F5
COM9 Bytes[5]:  6465656564
COM6 Bytes[6]:  01FD01C4A8EA
COM9 Bytes[4]:  65656564
COM6 Bytes[11]: 01FD01C4A8AA4001C4A8EA
COM9 Bytes[5]:  6565656465
COM6 Bytes[11]: 01FF01E2A8554001C4A8EA


Por lo que segun veo estoy leyando datos de mas. por que solo deberia de leer un 64 y un 65 para segir con la espuesta del host B.

Voy de momento a ver si puedo abordar el tema de Un cable modificado para tratar de leer los datos directamente.

Saludos y gracias por tu respuesta Engel, pense que nadie me responderia  ;-) ;-)




FUNCIONO!!!!

El cable modificado funciono bajo el diagrama mostrado, conseguí los Diodos de un eliminador de Corriente (Descompuesto) que estaba apunto de tirar, los desoldé del mismo y los puse en el cable tal como muestra el diagrama.

Ahora puede ver la comunicación entre los dispositivos en tiempo real.

El unico inconveniente que le veo es al estar leyendo de desde la computadora a través de un único puerto COM, es que no se distinguir que bytes leidos envió el host A y cuales el host B, solo me quedara depurar, prueba y error.

Saludos!


Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

engel lex

#3
Ya  eso último lamentablemente te toca usar 2 conversores serial a USB para distinguir la comunicación

También podrias grabar una session en una dirección y procurar replicar grabando en la otra dirección

Si si, sin los diodos creas un crossover en la comunicación (haces un corto, pero no de los que echan chispas y causan incendios xD)



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.

AlbertoBSD

Asi es para solucionarlo tuve que modificar el cable y agregar otra terminal RS232 con su respectivo adaptador USB para poder leerlo desde la laptop.

Quedo funcionando perfectamente ahora distingo la communication de cada dispositivo.

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW