Aprire una console seriale sul proprio cellulare

Qualche tempo fa ho scritto un breve articolo sui comandi AT nel mondo dei cellulari. Mediante questi comandi è possibile interfacciarsi al modem del telefono attraverso una console seriale, e attraverso questo accedere a una serie di funzionalità che variano da telefono a telefono e possono includere cose tipo fare chiamate, mandare sms, leggere gli sms nella memoria e così via. Però prima di questo è necessario creare la connessione tra il computer e il telefono: vediamo un pò come si fa.

Siccome i cavi sono sempre scomodi, tenteremo di instaurare questa connessione via bluetooth. Per prima cosa bisogna verificare che il computer abbia un adattatore bluetooth configurato a dovere e pure il cellulare (che deve avere il bluetooth attivo e in modalità “visibile a tutti”).

Lavoreremo sotto Ubuntu Linux (non voglio nemmeno immaginare quanto potrebbe essere complicato tentare di fare quello che sto per fare sotto winzozz🙂 ). Dovremo avere installato lo stack bluetooth e i pacchetti bluez-sdp e bluez-util:

mario@ninfa:-$ sudo apt-get install bluez-utils bluez-sdp
mario@ninfa:-$ sudo /etc/init.d/bluetooth restart

Per prima cosa scopriamo l’indirizzo bluetooth (univoco) del nostro telefono:

mario@ninfa:-$ hcitool scan

scanning…
00:11:22:33:44:55    Mario

Il tool di ricerca ha individuato un telefono di nome Mario e indirizzo univoco 00:11:22:33:44:55 (segnamolo da qualche parte, sarà con quello che il computer potrà identificare il telefono). Passiamo ad esaminare i servizi a disposizione sul telefono:

mario@ninfa:-$ sdptool browse 00:11:22:33:44:55

Il risultato sarà un sacco di testo, che rappresenta una voluminosa e dettagliata descrizione di tutti i servizi messi a disposizione dal telefono mediante bluetooth (si va dallo scambio di file fino alla connessione dell’auricolare). Quello che interessa a noi in questo caso è il servizio di Dial Up Networking, corrispondete al modem:

[…un sacco di roba…]

Service Name: Dial-up Networking
Service RecHandle: 0x10002
Service Class ID List:
“Dialup Networking” (0x1103)
“Generic Networking” (0x1201)
Protocol Descriptor List:
“L2CAP” (0x0100)
“RFCOMM” (0x0003)
Channel: 2
Profile Descriptor List:
“Dialup Networking” (0x1103)
Version: 0x0100

[…un sacco di roba…]

Nel testo ho evidenziato l’informazione importante: il canale da usare per la comunicazione. NB: su alcuni telefoni esiste anche il servizio “serial console”, ma non sono sicuro di quale sia la sua funzione. Vale la pena di fare qualche prova se il canale indicato sopra non funziona.

Una volta scelto il canale, predisponiamo il computer per la connessione. Modifichiamo il file hcid.conf, quello che sovrintende alle connessioni bluetooth del computer:

mario@ninfa:-$ sudo vim /etc/bluetooth/hcid.conf

Per cominciare, bisogna impostare la modalità di autenticazione tra telefono e computer. Come sappiamo, l’autenticazione su bluetooth avviene mediante impostazione di un PIN. Potremmo configurare Linux per domandare il PIN ogni volta che instaura una connessione, ma al momento non vale la pena di perderci tempo: imposteremo un PIN unico per il computer; teniamo presente di stare attenti, dato che un PIN statico significa che chiunque lo conosca si può collegare ai servizi bluetooth del nostro computer!

In questo caso sarà sufficiente verificare che la riga security del file abbia questo aspetto:

security auto;

e che la riga passkey riporti il PIN statico da noi scelto (in questo caso quattro zeri):

passkey “0000”;

Salviamo e chiudiamo il file. Riavviamo il sistema bluetooth:

mario@ninfa:-$ sudo /etc/init.d/bluetooth restart

Inizializzazione della comunicazione

Il passo successivo è creare il binding tra cellulare e computer. Per questo è necessario utilizzare la “ricerca dispositivi bluetooth” del telefono, individuare il computer e iniziare la connessione. Verrà richiesto il PIN, e noi inseriremo quello specificato prima (nell’esempio 0000). NB: questo passaggio è facoltativo: nel caso venga inizializzata la comunicazione (mediante i comandi descritti in seguito) senza un binding preventivo, questo dovrebbe essere comunque avviato automaticamente; in ogni caso durante il binding verrà richiesto il PIN.

A questo punto dobbiamo creare la connessione tra una console seriale e il canale desiderato sul telefono.

mario@ninfa:-$ sudo rfcomm bind rfcomm0 00:11:22:33:44:55 1

dove:

  • rfcomm0 è il nome della console seriale
  • 00:11:22:33:44:55 è l’indirizzo fisico del cellulare
  • 1 è il canale (sostituire col valore trovato prima)

Per verificare l’avvenuta connessione è sufficiente utilizzare ancora il comando rfcomm:

mario@ninfa:-$ rfcomm

rfcomm0: 00:11:22:33:44:55 channel 1 clean

A questo punto la connessione è attiva. Non ci resta che accedervi, ad esempio così:

mario@ninfa:-$ screen /dev/rfcomm0

Si aprirà una console completamente vuota, dato che il modem non ha prompt. Per verificare il funzionamento basta inviare il comando AT seguito dal tasto invio; il telefono dovrebbe rispondere con un OK. Funziona!!!!

Per chiudere la comunicazione basta un control+c.

Per un elenco dei comandi AT con cui si può giocherellare vi lascio questo link, con un elenco di comandi supportati da Nokia (e parzialmente anche da altri telefoni). Tenete sempre presente che solo una parte di essi sarà utilizzabile, dipende dal modello del vostro telefono. E tenete presente di andarci piano, e fare prove a ragion veduta, perchè sennò rischiate di incasinarvi il telefonino!

Rendere le impostazioni permanenti

Un’ultima cosa: per rendere le impostazioni di comunicazione permanenti, bisogna modificare il file /dev/bluetooth/rfcomm.conf:

mario@ninfa:-$ sudo vim /etc/bluetooth/rfcomm.conf

e aggiungervi una sezione simile a questa:

rfcomm0 {
bind no;
device 00:11:22:33:44:55;
channel 1;
comment “il mio telefonino bello bello”;
}

Ovviamente i valori di device e channel devono essere impostati correttamente. Salviamo e chiudiamo il file. A questo punto per avviare la connessione è sufficiente digitare:

mario@ninfa:-$ sudo rfcomm bind /dev/rfcomm0

E per terminarla:

mario@ninfa:-$ sudo rfcomm release /dev/rfcomm0

Senza doversi ricordare indirizzo o canale. Comodo, no? Esiste infine una terza strada: nel file rfcomm.conf modificato prima, nella riga bind della sezione che abbiamo aggiunto mettiamo yes invece di no: in questo modo il computer tenterà automaticamente di connettersi al cellulare ogni volta che questo sarà vicino e col bluetooth attivo. Per questi esperimenti è in effetti inutile, ma potrebbe risultare utile in futuro.

Beh, per ora è tutto, spero di essermi spiegato bene. Se avete dubbi non esitate a scrivere nei commenti, farò il possibile per rispondere. Ciao a tutti!

Questa voce è stata pubblicata in Uncategorized e contrassegnata con , , , . Contrassegna il permalink.

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...