Sniff puerto serie en Linux

Respuestas:

27

Hay algunas opciones:

  • sersniff es un programa simple para hacer un túnel / olfatear entre 2 puertos seriales.

  • El Proxy Serial a Red (ser2net) proporciona una manera para que un usuario se conecte desde una conexión de red a un puerto serie.

  • SerialSpy actúa como un dispositivo de transferencia en serie. Escucha los datos entrantes en dos puertos seriales y los reenvía para que los dispositivos actúen como si estuvieran conectados directamente. También registra los datos a medida que se mueven a través de los puertos.

  • sercd es un redirector de puerto serie compatible con RFC 2217. Le permite compartir un puerto serie a través de una red. Se basa en sredird. El protocolo RFC2217 es una extensión de telnet y permite cambiar los parámetros del puerto de comunicación.

  • SerLooK es una aplicación de KDE para inspeccionar datos que pasan por líneas seriales. Puede funcionar como un terminal binario que envía y recibe datos a través de un puerto definido (modo punto a punto) y los muestra en vistas separadas. Cada vista se puede configurar para mostrar datos en ASCII hexadecimal, decimal, octal, binario y sin formato. También es posible realizar E / S a través de vistas de emulación de terminal y definir un puerto secundario y monitorear el tráfico entre dos hosts externos utilizando un cable "Y" (modo Snooper).

  • nullmodem crea una red virtual de pseudo terminales. Se puede usar como un adaptador para conectar dos programas que normalmente necesitan tarjetas de interfaz en serie.

  • ttywatch monitorea, registra y multiplexa la E / S de terminal. Tiene una rotación completa de registros incorporada, y puede usar telnet y puertos TTY locales.

  • El sniffer de línea serie (slsnif) es una utilidad de registro de puerto serie. Escucha el puerto serie especificado y registra todos los datos que pasan por este puerto en ambas direcciones.

hlovdal
fuente
2
Puede lograr esto con herramientas estándar usando socaty tee. 1) socat -d -d pty,raw,echo=0 pty,raw,echo=0. La salida te dará dos puertos ...N PTY is /dev/pts/27... N PTY is /dev/pts/28. 2) sudo cat /dev/ttyS0 | tee /dev/pts/27y en otra terminal sudo cat /deb/pts/27 | tee /dev/ttyS0. Finalmente 3) Conecte su programa a /dev/tty/28. Los dos comandos tee descargarán ambas direcciones a la consola y reenviarán hacia / desde el puerto serie real. Tenga en cuenta que la configuración del puerto, como la velocidad en baudios, debe configurarse con anticipación.
jtpereyda
Puede guardar el tee cosas a un archivo, también: cat /dev/pts/27 | sudo tee /dev/ttyS0 serial-capsy xxdle ayudará si es un protocolo binario: cat /dev/pts/27 | sudo tee /dev/ttyS0 serial-caps | xxd.
jtpereyda
@jtpereyda parece que su tercer paso debería ser conectar el programa a / dev / ttyS0. por ejemplo, cuando conecto PUTTY allí a / dev / ttyS0, me muestra correctamente esa salida en el paso 2 mientras también me comunico con la placa incorporada real. Por cierto que tiene un error tipográfico /deb/pts/27debe ser /dev/pts/27. También cat /deb/pts/27 | tee /dev/ttyS0debería sercat /dev/pts/27 | sudo tee /dev/ttyS0
enthusiasticgeek
Esta respuesta es muy antigua, considere la interceptación para la detección de puertos en serie
CharlesB
1
Podrías proporcionar eso como otra respuesta. @CharlesB Explicar por qué es mejor también sería bueno.
pollitos
12

Intenté la intercepción ( copia en GitHub ), y tuve éxito al usarla. Primero lo ejecuté en el puerto de interés:

interceptty /dev/ttyACM0 

Luego conecté el programa bajo prueba al pseudo-terminal /dev/pts/5que creó la intercepción.


Intenté usar slsnif , pero descubrí que recibí un error:

Failed to open a pty: No such file or directory

Este elemento de la lista de correo indica que slsnif solo admite los pseudo terminales "heredados" ( /dev/ttyp0etc.) que probablemente no se usan en los núcleos Linux actuales.

Craig McQueen
fuente
1
¡Gracias! El mismo error aquí en mi dispositivo incrustado. ¡Entonces lo utilicé intercepttyy trabajé!
gfleck
¿Cómo sabes qué pseudo-terminal crea?
chwi
@chwi Puede darle un segundo parámetro, que es el nombre de un "dispositivo frontal" que es un enlace simbólico al pseudo-terminal que crea.
Craig McQueen
Gracias. Descubrí que, por defecto, crea un / dev / intercepttydummy. Pude ver el tráfico de un lado a otro, pero los datos entrantes del dispositivo solo se leían por intercepción, no mi software se ejecutaba en pyserial.
chwi