Inoltrare dati da seriale virtuale ad un indirizzo di rete tramite socket TCP

Vediamo come inoltrare dati da seriale virtuale verso un indirizzo di rete.

Passo 1 – Scegliere la seriale da utilizzare

E’ possibile visualizzare la lista delle seriali virtuali disponibili nel sistema con il comando:

dmesg | grep tty


Passo 2 – Socat

Socat è un utilissimo strumento già presente in molte distro Linux, che consente di manipolare ed eseguire il forwarding di pacchetti di rete.

Aprire un terminale ed acquisire i privilegi di ROOT (importante).

Eseguire questo comando per inizializzare l’inoltro dei pacchetti in arrivo
sulla seriale ttyS0, verso l’indirizzo IP di loopback, sulla porta 60001:

socat pty,link=/dev/ttyS0,raw tcp:127.0.0.1:60001&

Ovviamente basterà modificare il comando con la seriale e l’indirizzo IP:porta desiderati.

Un altro possibile uso è il binding (unione) di due differenti seriali:

socat PTY,link=/dev/ttyS10 PTY,link=/dev/ttyS11


Passo 3 – Invio/Ricezione con Python

3.1

Per poter ricevere i dati, dobbiamo predisporre un listener sull’indirizzo IP di destinazione (non trattato in dettaglio in questo articolo). Nel nostro caso usiamo semplicemente netcat, in ascolto sempre sulla porta 60001 (attenzione che la porta scelta non sia gìà in uso).
Diamo il comando (in un nuovo terminale con privilegi di ROOT):

nc -l 60001

oppure

nc -v localhost 60001

3.2

Prepariamo un semplice script per scrivere su seriale (utilizzando il Python) e salviamolo con il nome sender.py:

#START (serial forwarder)
import sys
import time
import os, pty, serial

#configure the serial connections
print "\nSTARTING SERIAL PRINT\n"

# open serial port
ser = serial.Serial('/dev/ttyS0', 9600, rtscts=True, dsrdtr=True)
print "SERIAL FORWARDER > (remind to use this as a root!)\n"

# write test string
ser.write("\n > serial test for an ALARM! \n go go ALARM! go :) ")

# close serial port
ser.close();
#END

eseguiamolo da un nuovo terminale (con privilegi di ROOT) con il comando seguente:

python sender.py

NOTA: installiamo pyserial se necessario (se andando ad eseguire il passo precedente riceviamo un errore):

sudo apt-get install python-serial

Potrete adesso vedere la connessione di socat, verso l’IP di destinazione.

Ulteriori informazioni su socat, al sito ufficiale.

Share on Social Media