NCID

Da raspibo.

Network Caller Id (NCID) è un software nato con lo scopo per visualizzare il numero telefonico di chi ci sta chiamando.


Il software supporta diversi tipi di chiamata e di device, il caso più classico che andremo a utilizzare in questa guida è quello della linea pots tradizionale, sono supportate anche la chiamate voip ma al momento non è disponibile la funzionalità che andremo ad esaminare in questa pagina

Oltre a presentare in generale ncid, vedremo come utilizzarlo per filtrare le chiamate in arrivo ad esempio possiamo decidere di ricevere le chiamate solo da una lista di numeri oppure al contrario bloccare un solo chiamante.

Purtroppo negli ultimi tempi con l'avvento dei call center riceviamo troppe chiamate indesiderate e le truffe telefoniche agli anziani hanno risvolti spesso poco piacevoli.

NCID

Indice

Descrizione generale

Ncid è costituito da un processo demone che gira in background e fa da server per smistare informazioni riguardo chiamate telefoniche.

Il processo ncidd (la seconda d indica il processo demone che gira in background) si occupa di recepire informazioni dal modem collegato alla linea telefonica per mandare la notifica di una chiamata ad un processo client oppure un dispositivo Android oppure ad un client su PC.

Al demone (il processo che gira sulla macchina server) si collegano appunto diversi tipi di client, i client possono girare sulla stessa macchina in cui è il escuzione il server appure su altri sistemi.

Ncid può essere utilizzato anche per tenere traccia delle chiamate ricevute, una funzione che ormai supportano parecchi device, ma utile in qualche caso.

Requisiti

Vediamo ora la lista del materiale necessario per il nostro setup:

  • linea Pots (fisica o uscita nalogica da un modem adsl)
  • modem analogico USB con riconoscimento del l'identificativo del numero chiamante
  • opzionale ma consigliato hub usb per alimentare il modem
  • raspberry pi (non è obbligatorio, la procedura può essere fatta anche con un pc, ma poi il server deve rimanere sempre acceso e quindi meglio sfruttare un sistema a basso consumo)

Configurazione del modem

Partiamo dalla configurazione del modem, la configurazione di questo device richiede un pò di elasticità e dipende dal tipo di periferica.

Nel nostro caso abbiamo utilizzato un modem Rockwell USB con identificativo del chiamante.

Abbiamo detto che il modem deve supportare il riconoscimento dei toni multifrequenza che codificano l'identità della linea chiamante.

Probabilmente non tutti i modem hanno questa caratteristica, ma sul sito di ncid ne potete trovarne una lista assieme anche ai comandi AT di configurazione dei chipset più diffusi.

La lista dei modelli non è completa, perciò se avete un modem in casa vi conviene fare qualche test e magari siete fortunati.

Innanzitutto cerchiamo il device associato al modem.

Apriamo un terminale e lanciamo il comando:

dmesg

Vedremo scorrere i messaggi del kernel. Ora inseriamo il modem nella porta USB e lanciamo di nuovo il comando

dmesg.

Se il modem è stato riconosciuto vedremo alcune righe in più rispetto alla prima volta con l'indicazione del device assegnato al modem ad esempio ACM0 oppure AMA0 infine USB0 si tratta di device seriali come quelli utilizzati da Arduino.

Ora possiamo dare il comando

ls -lrt /dev

controllando la presenza del device con il nome ricavato con il comando dmesg-

In questo esempio supponiamo che il device del nostro modem sia /dev/ttyACM0

Ora proviamo a vedere se il modem supporta il riconoscimento del numero chiamante.

Installiamo un programma di comunicazione seriale ad esempio picocom

sudo apt-get install picocom

Connettiamoci al modem specificando la velocità di comunicazione del modem in questo caso 38400

picocom /dev/ttyACM0 -b 38400

Ora per controllare se siamo veramente connessi al modem e se la velocità di comunicazione è corretta digitiamo il comando

AT

Se è tutto ok il modem risponde

OK

Ora proviamo a dare il comando che attiva il riconoscimento della linea chiamante

AT+VCID=1

Se il modem risponde OK è il momento di provare a chiamare e vedere se il risultato è quello atteso.

“
RING
DATE = 0908
TIME = 2025
NMBR = xxxxxxxxx //Apparità il numero del chiamante 
NAME = O
“

Rpi+Modem.jpg

Installazione del software

Ora possiamo procedere all'installazione del software.

Prima di tutto installiamo le dipendenze

sudo apt-get install libpcap0.8 libconfig-simple-perl

Ora installiamo l'ultima versione di ncid che si trova susourceforge.net, per raspberry sono già pronti i files .deb perciò basta scaricarli con il comando wget. (Verifichiamo a questa pagina se sono presenti nuove versioni)

wget http://downloads.sourceforge.net/ncid/ncid_1.2-1_armhf.deb

Ora avremo un file .deb nella cartella in cui ci troviamo e basta lanciare l'installazione con dpkg

sudo dpkg -i ncid_1.2-1_armhf.deb

Ora che il programma è installato andiamo a configurare le impostazioni del processo demone

 sudo nano /etc/ncid/ncidd.conf

Configurazione

Nel nostro caso decommentiamo le righe

set hangup = 1
set ttyport = /dev/ttyACM0
set ttyspeed = velocità della seriale  
set lockfile = /var/lock/LCK..ttyACM0

Ora possiamo chiudere il file di configurazione e rilanciare il demone.

sudo /etc/init.d/ncidd restart

Se abbiamo fatto tutto correttamente il demone dovrebbe essere in funzione.

Debug

Spesso riuscire a configurare tutto al primo tentativo e' difficile, quindi proviamo una sessione di debug:

Fermiamo il demone

/etc/init.d/ncidd stop 

Lanciamo il demone in modalità debug

ncidd -Dv3

Lanciato il comando di debug vediamo il programma che parte e riconosce il modem e resta in attesa della chiamata.

Modem supports Data Mode
Modem supports FAX Mode 1
Modem supports FAX Mode 2
Modem supports VOICE Mode
Hangup option = 1: hangup on a blacklisted call
Sent Modem 11 of 11 characters:
AT+VCID=1
Modem response: 17 characters in 1 read:
T+VCID=1
OK
Modem set for CallerID.
Modem used for CallerID and to terminate calls
Using simple expressions in blacklist/whitelist files
Network Port: 3333
Debug Mode
Not using PID file, there was no '-P' option.
Modem is fd 3
NCID connection socket is sd 4 pos 1

Configurazione delle liste chiamanti

Ora fermiamo il debug con Ctrl + c e proviamo a mettere il nostro numero di cellulare in blacklist

sudo nano /etc/ncid/ncidd.blacklist

Aggiungiamo in fondo al file una riga col numero telefonico

^33123456789

Sono ammessi anche caratteri jolly ad esempio ^ indica l'inizio della stringa e * indica qualsiasi carattere

Ad esempio:

^051* 

indica tutti i numeri con prefisso 051.

Ora proviamo a chiamare dopo aver rilanciato il processo in debug

HUP: *DATE*12122015*TIME*2120*LINE*-*NMBR*”numero del chiamante”*MESG*NONE*NAME*OUT-OF-AREA*

Nel log si vedrà il numero del chiamante, usando la ncidd.blacklist o ncidd.whitelist possiamo bloccare dei numeri o una serie di numeri e abilitarne altri, lavorando con queste due liste si può configurare il programma per filtrare le chiamate.

Ricordate che mettendo un numero nel file whitelist si disabilitano tutti gli altri possibili numeri e viceversa con il file blacklist.

Note

I modem analogici a volte hanno problemi e smettono di funzionare, abbiamo fatto un pò di test e ogni tanto vanno resettati.

Riferimenti

By Msystem & dancast78

Appunti da sistemare

Di seguito una lista di comandi da sistemare in attesa che arrivi il modem....

Client per visualizzazione chiamate ricevute

sudo apt-get install python-twisted
git clone https://github.com/shrick/ncidmon

In formato web:

cd ncidmon
python ncidmon.py localhost:3333 --disable-notifications --listen -d --http 0.0.0.0:8080

di default vengono visualizzati due link su cui cercare notizie sul chiamante, sono relativi alla rete telefonica tedesca. E' possibile personalizzare i link modificando il file ncidmon/misc.py

Sulla riga di comando:

/usr/ncidmon/ncidmon.py --disable-notifications 

Output:

>>> 200 Server: ncidd (NCID) 1.2
>>> 210 API: 1.1 Feature Set 1 2 3 4
>>> MSGLOG: NCIDmon client connected at 2016-12-29 13:07:19.134881 ***DATE*12292016*TIME*1307*NAME*NONAME*NMBR*NONMBR*LINE*NOLINE*MTYPE*NOTYPE*
>>> MSGLOG: NCIDmon client connected at 2016-12-29 13:12:14.692604 ***DATE*12292016*TIME*1312*NAME*NONAME*NMBR*NONMBR*LINE*NOLINE*MTYPE*NOTYPE*
>>> MSGLOG: NCIDmon client connected at 2016-12-29 13:27:27.754508 ***DATE*12292016*TIME*1327*NAME*NONAME*NMBR*NONMBR*LINE*NOLINE*MTYPE*NOTYPE*
>>> HUPLOG: *DATE*12292016*TIME*1329*LINE*POTS*NMBR*123456789*MESG*NONE*NAME*NO NAME*
>>> HUPLOG: *DATE*12292016*TIME*1329*LINE*POTS*NMBR*123456789*MESG*NONE*NAME*NO NAME*
>>> MSGLOG: NCIDmon client connected at 2016-12-29 13:30:34.534661 ***DATE*12292016*TIME*1330*NAME*NONAME*NMBR*NONMBR*LINE*NOLINE*MTYPE*NOTYPE*
>>> HUPLOG: *DATE*12292016*TIME*1330*LINE*POTS*NMBR*123456789*MESG*NONE*NAME*NO NAME*
>>> MSGLOG: NCIDmon client connected at 2016-12-29 13:43:08.080848 ***DATE*12292016*TIME*1343*NAME*NONAME*NMBR*NONMBR*LINE*NOLINE*MTYPE*NOTYPE*
>>> HUPLOG: *DATE*12292016*TIME*1355*LINE*POTS*NMBR*123456789*MESG*NONE*NAME*NO NAME*
>>> HUPLOG: *DATE*12292016*TIME*1357*LINE*POTS*NMBR*123456789*MESG*NONE*NAME*NO NAME*
>>> MSGLOG: NCIDmon client connected at 2016-12-29 13:59:04.841391 ***DATE*12292016*TIME*1359*NAME*NONAME*NMBR*NONMBR*LINE*NOLINE*MTYPE*NOTYPE*
>>> MSGLOG: NCIDmon client connected at 2016-12-29 14:08:12.331177 ***DATE*12292016*TIME*1408*NAME*NONAME*NMBR*NONMBR*LINE*NOLINE*MTYPE*NOTYPE*
>>> MSGLOG: NCIDmon client connected at 2016-12-29 14:08:34.147800 ***DATE*12292016*TIME*1408*NAME*NONAME*NMBR*NONMBR*LINE*NOLINE*MTYPE*NOTYPE*
>>> MSGLOG: NCIDmon client connected at 2016-12-29 14:08:48.352660 ***DATE*12292016*TIME*1408*NAME*NONAME*NMBR*NONMBR*LINE*NOLINE*MTYPE*NOTYPE*
>>> MSGLOG: NCIDmon client connected at 2016-12-29 14:08:56.788026 ***DATE*12292016*TIME*1408*NAME*NONAME*NMBR*NONMBR*LINE*NOLINE*MTYPE*NOTYPE*
>>> MSGLOG: NCIDmon client connected at 2016-12-29 14:09:13.945774 ***DATE*12292016*TIME*1409*NAME*NONAME*NMBR*NONMBR*LINE*NOLINE*MTYPE*NOTYPE*
>>> MSGLOG: NCIDmon client connected at 2016-12-29 14:09:31.532692 ***DATE*12292016*TIME*1409*NAME*NONAME*NMBR*NONMBR*LINE*NOLINE*MTYPE*NOTYPE*
>>> 250 End of call log
(1) 29.12.2016, 13:02 - 123456789
(2) 29.12.2016, 13:05 - 123456789
(3) 29.12.2016, 13:25 - 123456789
(4) 29.12.2016, 13:59 - 123456789
(5) 29.12.2016, 14:09 - 123456789

volendo anche in aggiornamento in attesa di nuove chiamate

/usr/ncidmon/ncidmon.py --disable-notifications --listen 

Per compilare la blacklist può essere comodo vedere solo l'elenco dei numeri chiamanti:

/usr/ncidmon/ncidmon.py --disable-notifications  | grep "^("|awk '{print $5}'

Aggiungere numeri in blacklist

Script per semplificare il comando di aggiunta dei numeri in blacklist

#!/bin/bash
if [ $# -ne 2 ]
then
 echo "Lancia lo script: $0 <numero da aggiungere in blacklist> <commento>"
else
 sudo /usr/bin/ncidutil "/etc/ncid/ncidd.blacklist" Blacklist add "$1" "#$2"
fi

Aggiungiamo un numero

pi@termostato:~ $ ./ncid_blacklist_add.sh 0123456790 "Test Numero da bloccare"
Done.

Il comando ncidutil avvisa se il numero è già presente (se dovesse succedere qualcosa non ha funzionato....)

pi@termostato:~ $ ./ncid_blacklist_add.sh 0123456790 "Test Numero da bloccare"
Alias is already present.
Strumenti personali
Namespace

Varianti
Azioni
Navigazione
Strumenti