Come posso sniffare i pacchetti comunicati attraverso una porta seriale su Linux?
Come posso sniffare i pacchetti comunicati attraverso una porta seriale su Linux?
Risposte:
Ci sono alcune opzioni:
sersniff è un semplice programma per tunnelare / annusare tra 2 porte seriali.
Serial to Network Proxy (ser2net) fornisce un modo per un utente di connettersi da una connessione di rete a una porta seriale.
SerialSpy funge da dispositivo pass-through seriale. Ascolta i dati in entrata su due porte seriali e li inoltra in modo che i dispositivi si comportino come se fossero collegati direttamente. Inoltre registra i dati mentre si sposta attraverso le porte.
sercd è un redirector di porta seriale conforme a RFC 2217. Ti consente di condividere una porta seriale attraverso una rete. Si basa su sredird. Il protocollo RFC2217 è un'estensione di telnet e consente di modificare i parametri della porta di comunicazione.
SerLooK è un'applicazione KDE per l'ispezione di dati che vanno su linee seriali. Può funzionare come un terminale binario che invia e riceve dati attraverso una porta definita (modalità Point to Point) e li visualizza in viste separate. Ogni vista può essere configurata per visualizzare i dati in formato ASCII esadecimale, decimale, ottale, binario e non elaborato. È anche possibile eseguire I / O attraverso le viste di emulazione del terminale e definire una porta secondaria e monitorare il traffico tra due host esterni utilizzando un cavo "Y" (modalità Snooper).
nullmodem crea una rete virtuale di pseudo-terminali. Può essere utilizzato come adattatore per collegare due programmi che normalmente richiedono schede di interfaccia seriale.
I / O terminali ttywatch monitor, registri e multiplex. Ha la rotazione completa del registro integrata e può utilizzare sia le porte TTY locali che Telnet.
Lo sniffer di linea seriale (slsnif) è un'utilità di registrazione della porta seriale. Ascolta la porta seriale specificata e registra tutti i dati che attraversano questa porta in entrambe le direzioni.
socat
e tee
. 1) socat -d -d pty,raw,echo=0 pty,raw,echo=0
. L'output ti darà due porte ...N PTY is /dev/pts/27... N PTY is /dev/pts/28
. 2) sudo cat /dev/ttyS0 | tee /dev/pts/27
e in un altro terminale sudo cat /deb/pts/27 | tee /dev/ttyS0
. Finalmente 3) Connetti il tuo programma a /dev/tty/28
. I due comandi tee eseguiranno il dump di entrambe le direzioni verso la console e inoltreranno alla / dalla porta seriale effettiva. Si noti che le impostazioni della porta come baudrate devono essere configurate in anticipo.
cat /dev/pts/27 | sudo tee /dev/ttyS0 serial-caps
e xxd
sarà utile se si tratta di un protocollo binario: cat /dev/pts/27 | sudo tee /dev/ttyS0 serial-caps | xxd
.
/deb/pts/27
dovrebbe essere /dev/pts/27
. Inoltre cat /deb/pts/27 | tee /dev/ttyS0
dovrebbe esserecat /dev/pts/27 | sudo tee /dev/ttyS0
Ho provato intercettazione ( copia su GitHub ), e sono riuscito a usarlo. Prima l'ho eseguito sul porto di interesse:
interceptty /dev/ttyACM0
Quindi ho collegato il programma sotto test allo pseudo-terminale /dev/pts/5
creato dall'intercettazione.
Ho provato a usare slsnif , ma ho scoperto di avere un errore:
Failed to open a pty: No such file or directory
Questa voce della mailing list indica che slsnif supporta solo gli pseudo-terminali (legacy) "legacy" /dev/ttyp0
che probabilmente non sono usati sugli attuali kernel Linux.
interceptty
e ha funzionato!
Prova a usare jpnevulator (debian packaged) o slsniff . Si noti che slsniff utilizza un modello di emulazione terminale deprecato.