Differenze tra le versioni di "NCID"
(Una versione intermedia di uno stesso utente non è mostrata) | |||
Riga 188: | Riga 188: | ||
/usr/ncidmon/ncidmon.py --disable-notifications | /usr/ncidmon/ncidmon.py --disable-notifications | ||
+ | |||
+ | Output: | ||
<source lang=txt> | <source lang=txt> | ||
Riga 221: | Riga 223: | ||
/usr/ncidmon/ncidmon.py --disable-notifications --listen | /usr/ncidmon/ncidmon.py --disable-notifications --listen | ||
− | Per compilare la blacklist | + | Per compilare la blacklist può essere comodo vedere solo l'elenco dei numeri chiamanti: |
/usr/ncidmon/ncidmon.py --disable-notifications | grep "^("|awk '{print $5}' | /usr/ncidmon/ncidmon.py --disable-notifications | grep "^("|awk '{print $5}' |
Versione attuale delle 15:15, 29 dic 2016
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.
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 “
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.