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.