![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Usar el LARS (espiar protocolos sobre RS-232)Cómo usar el lars con "pocos datos"El lars es un programa para Linux que funciona como un "analizador lógico digital" de puerto serie. Tan sólo hay que preparar un cable especial que conecte la tierra con la tierra, la transmisión (remota) con el CTS (local) y la recepción (remota) con el DSR (local). Para que sea realmente útil ha de ser una derivación en un cable que comunica dos equipos (así "espías" la comunicación). De interés: pinouts del rs-232 y cómo espiar comunicaciones serie estandar usando dos puertos (eso sirve si sólo pretendes espiar las comunicaciones y sabes los parámetros de la comunicaciíon. Otra manera de hacerlo es usando un PC de puente, que forwardee los datos de uno a otro). Lo que se va a explicar aquí es cómo espiar la comunicacion sin saber los parámetros de configuración del puerto. El programa se puede descargar de http://www.consistent.org/serial-la/ En SICO, está compilado en salchicha:/home/dario/Programacion/proyectos/sico-lars/lars-0.3/ y ahí (en sico-lars) hay además un programa, lasample2bits, que hace la interpretación de los datos un poco más sencilla que con el lachart. 1) TOMA DE DATOS Primero se toman los datos con el lasample: # ./lasample -t 500 > /tmp/sample Con lo que coge 5 segundos de datos (o eso creo). 2) OBTENCION DE LAS CARACTERISTICAS DE LA TRANSMISION Luego se comprueba la longitud del bit con el lars232: # ./lars232 -s 0 -v < /tmp/sample # ./lars232 -s 1 -v < /tmp/sample (lo que interesa es, en la parte de "Shortest transition 415 microseconds", el número de microsegundos) 3) OBTENCION DE LOS INTERVALOS CON DATOS [Opcional] 3.1) Usando lachart Buscas qué parte es la interesante haciendo que lo represente "rudamente": # ./lachart -u 10000 < /tmp/sample | less Lo que buscas son las zonas de alrededor del aviso de "Warning! You are getting aliasing. Try smaller timesstep." Apunta el número del principio de la línea (-2) respecto a ese aviso y la de la línea siguiente al último de esos avisos que te han dado "seguidos". Los números seran del estilo de 1600000 us (1.6s), pero es mas cómodo manejarlos en ms, o sea que divide por 1000; apunta 1600 en vez de 1600000. 3.2) Usando lasample2bits Primero haces un intento suponendo 9600: # ./lasample2bits < /tmp/sample | less Si ves que la columna de "número de bits" es siempre un múltiplo de un número (p.ej. 3.0), eso es que el 84 ms que ha usado no es la duración de un bit; nueva_duracion=multiplo*84 y vuelves a probar; p. ej. si salía múltiplo de 3.3, nueva_duracion sería 277, y entonces: # ./lasample2bits 277 < /tmp/sample | less 4) VISUALIZACION DE LOS PATRONES DE BITS Por último se pueden ver los patrones de bits con (si no has tomado intervalos antes): # ./lachart -u 415 < /tmp/sample | less Si tienes intervalos, puedes ver uno de ellos (p. ej. 1600ms-1700ms) con: # ./lachart -i 1600 1700 -u 415 < /tmp/sample | less 5) INTERPRETACION DE LOS PATRONES DE BITS Lo que hemos conseguido en (4) es que cada línea sea un bit. Cuando no se está transmitiendo nada, la línea está es el estado de 1. Para una transmisión en 7O1, se transmiten 10 bits: 1 start, 7 data, 1 Odd par, 1 stop (0) (1) Los bits de datos se transmiten desde LSB a MSB. El bit de start siempre es '0', el de stop siempre es '1'. Ejemplo en 7O1: str b0 b1 b2 b3 b4 b5 b6 par stp
+---+---+---+---+---+---+---+---+---+---+
... 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 1 1 0 ...
+---+---+---+---+---+---+---+---+---+---+
\______0______/ \____4____/ ='@'
str b0 b1 b2 b3 b4 b5 b6 par stp
+---+---+---+---+---+---+---+---+---+---+
... 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 0 1 0 0 ...
+---+---+---+---+---+---+---+---+---+---+
\______3______/ \____5____/ ='S'
str b0 b1 b2 b3 b4 b5 b6 par stp
+---+---+---+---+---+---+---+---+---+---+
... 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 1 0 1 ...
+---+---+---+---+---+---+---+---+---+---+
\______1______/ \____4____/ ='A'
str b0 b1 b2 b3 b4 b5 b6 par stp
+---+---+---+---+---+---+---+---+---+---+
... 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 1 1 1 ...
+---+---+---+---+---+---+---+---+---+---+
\______d______/ \____0____/ ='\x0d'
Y eso es todo. NOTA: si el lars232 ha reconocido todos los parámetros de la comunicación (p.ej. 2400 bps, 7 bits de datos, reversed, paridad Odd), puedes intentar que te "decodifique automáticamente la transmisión" con: # ./ladump -b 2400 -w 7 -r -p Odd -s 0 < /tmp/sample # ./ladump -b 2400 -w 7 -r -p Odd -s 1 < /tmp/sample |