Si vous avez une ligne fixe, vous avez peut-être le même souci que moi : des appels indésirables. Je me suis inscrit à Bloctel mais certains continuent. Mais j’ai une solution efficace : un antispam physique avec un Raspberry Pi.
Mon problème est un peu idiot : j’utilise une ligne VoIP OVH avec un boîtier client (Linksys PAP2) depuis quelques années, avec un numéro donné (normalement) exclusivement à un cercle restreint, en gros la famille. Mais visiblement le numéro s’est retrouvé dans la nature, soit via mon ancienne banque, soit via OVH lui-même (aucune idée) et je reçois donc régulièrement des appels liés à mon ancien logement (j’ai déménagé il y a plus de 5 ans). Pour signaler des travaux, vérifier si je veux vendre, etc. Assez vite énervant.
La solution que j’utilise fonctionne assez bien : elle se base sur un Raspberry Pi qui va détecter l’appelant et effectuer un vrai antispam. Si le numéro est bloqué, l’appareil émet une tonalité de fax avant de raccrocher directement. Il nécessite assez peu de matériel : un Raspberry Pi (j’ai utilisé un 3, mais un modèle de base doit suffire) et un modem en USB.
Avant même de passer à la configuration (un peu laborieuse), le choix du modem va être un souci. Premièrement, oubliez les modems USB US Robotics. En plus d’être assez onéreux, ils fonctionnent mal dans le cas présent. La solution de base consiste à utiliser un modem Trendnet, largement disponible (le TFM-561U). C’est le modèle que j’avais en stock, mais il a des défauts : il n’a pas de seconde prise RJ11 et ne gère pas toutes les fonctions. De plus, il se limite à la technologie américaine – j’en reparle ensuite -. Globalement, c’est à éviter, donc. La solution consiste à utiliser un modem 56K avec deux prises, qui gère bien l’audio et offre toutes les fonctions. Mais, vous vous en doutez, ce n’est pas si simple. En fait, c’est un modem USB « OEM », et sa disponibilité est aléatoire. J’ai acheté une version Sewell il y a deux semaines, et il n’est plus disponible. Mais d’autres (en novembre 2016) proposent le même, en tout cas selon les photos : Sodial, Kalea, IIEasy, etc. Comptez entre 10 et 25 € environ pour ce modèle.
Le second problème vient de la signalisation de l’appelant. Selon les pays, la façon d’indiquer à un téléphone (ou un modem) le numéro de l’appelant change. Aux USA, le « Bellcore » est la norme, avec une transmission après la première sonnerie. En Europe, ça dépend des pays, avec du DTMF ou de l’ETSI (et même une technologie différente au Royaume-Uni). Le souci vient des modems : ils ne comprennent pas tous toutes les technologies. Le modem Trendnet cité dans le paragraphe précédent n’accepte par exemple que le Bellcore. Dans mon cas, je n’ai pas eu de soucis : mon boîtier VoIP Linksys était réglé en Bellcore et mon téléphone affiche bien le numéro de l’appelant. Après, il peut fonctionner dans d’autres technologies, c’est un simple réglage. Je n’ai aucune idée de la norme utilisée par les Box des opérateurs, mais je suppose qu’il s’agit de l’ETSI français.
La connexion va être simple : le modem en USB, un câble vers le mur, un autre vers le téléphone. Comme le modem USB Sewell a deux prises, c’est pratique.
Sur le Raspberry Pi, première étape : installer JCBlock.
wget http://jcblock.cvs.sourceforge.net/viewvc/jcblock/?view=tar -O jcblok.tar.gz
tar xzvf jcblok.tar.gz
cd jcblock
mv jcblock/ ../jcb
cd ..
cd jcb
Il faut créer des fichiers pour les données. Je vous conseille juste de mettre un commentaire (#) dans le fichier avant de sauver. Vous pouvez aussi simplement renommer les exemples, mais ils contiennent des données.
nano blacklist.dat
nano whitelist.dat
nano callerID.dat
Ici, ça va dépendre de votre modem. La commande que j’utilise ici est celle pour un modem Sewell, mais elle changer avec un modem Trendnet (ou un autre). La documentation explique pas mal de cas différents.
sudo apt-get install libasound2-dev
./makejcblockAT
Troisième étape, JCAdmin. Il s’agit d’une sorte de GUI pour le programme, qui permet une gestion un peu plus simple que d’éditer des fichiers DAT à la main. Il nécessite NodeJS dans une version récente, à installer manuellement. Attention, la version dépend de votre Raspberry.
wget https://nodejs.org/dist/v6.9.1/node-v6.9.1-linux-armv6l.tar.xz
(si vous avez un Raspberry Pi B, B+, A, A+ ou Zero)
wget https://nodejs.org/dist/v6.9.1/node-v6.9.1-linux-armv7l.tar.xz
(si vous avez un Raspberry Pi 2 ou 3)
tar -xvf node*.tar.xz
cd node*
sudo cp -R * /usr/local/
Maintenant, l’installation de JCAdmin.
git clone https://github.com/cosinekitty/jcadmin
cd jcadmin
./initialize
Pour le lancement des logiciels, nous allons créer deux scripts.
cd ~/
mkdir script
cd script
Le premier lance JCBlock. Il faut adapter le code aux répertoirs que vous avez choisis.
nano jcbloc.sh
Le contenu.
#!/bin/bash
cd /home/pi/jcb
./jcblockAT | tee -a jcblock.log
Le second lance l’interface.
nano jcadmin.sh
Vous devez utilisez un port pour la connexion à la GUI (8080 ou autre) et bien indiquer le chemin pour l’installation de JCBlock.
#!/bin/bash
cd /home/pi/jcadmin
node jcadmin.js 8080 /home/pi/jcb/ | tee -a jcadmin.log
Ensuite, il faut rendre les scripts exécutables et les placer dans /etc/rc.local pour un lancement au démarrage.
sudo chmod +x jcadmin.sh
sudo chmod +x jcblock.sh
sudo nano /etc/rc.local
Juste avant la ligne exit 0;
.
/home/pi/script/jcblock.sh &
/home/pi/script/jcadmin.sh &
Dernier point, pratique sous macOS, l’annonce via Bonjour. Ca permet de voir le programme directement dans les liens Bonjour avec Safari. Commencez par installer Avahi et le nécessaire (c’est expliqué là).
sudo nano /etc/avahi/services/jcblock.service
Dans le service, quelques lignes. Attention au port, il doit être le même que dans le script.
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name>Antispam</name>
<service>
<type>_http._tcp</type>
<port>8080</port>
</service>
</service-group>
Pour terminer, un petit redémarrage.
Maintenant, ça donne quoi ?
L’interface affiche par défaut un journal des appels, et en cliquant sur un numéro, elle affiche la possibilité de changer le nom et de définir le type d’appelant. Safe n’est pas bloqué, Neutral ne l’est pas mais peut l’être et Blocked… l’est. Avec mon modem, une personne bloquée va entendre une tonalité de fax avant que le modem raccroche (après deux sonneries, à cause du Bellcore). Point intéressant, il est possible de blacklister depuis le téléphone : en pressant la touche *, le logiciel met l’appelant en liste noire. La fenêtre pour le faire reste assez courte : environ 7 secondes après avoir décroché (on entend un peu de bruit), vous avez 10 secondes pour presser la touche.
C’est en place depuis quelques jours, je vous en reparlerais peut-être un jour.
Possible sur une ligne classique (cuivre)?
Je suis chez Belgacom et y’a des demarcheurs qui me telephonent au moins quatre fois par semaine, ca en devient chiant a toujours verifier qui est l’appelant puis devoir laisser le telephone sonner pendant 30 secondes (avec la sonnerie qui va bien en plus)…
Ca change pas grand chose, a priori. Faut juste vérifier comment l’appelant est envoyé en Belgique en fait.
Salut, pourquoi les liens amazon sont-ils masqués ? Est-ce qu’il s’agit de liens d’affiliation (tag lejodula-21) ?
Si oui cela serait peut-être bien d’avertir les lecteurs, non ?
Oui, ils sont sponsorisés, et c’est indiqué dans la page about (https://www.journaldulapin.com/about/). Je ne l’indique pas à chaque fois, certes.
Depuis le temps que je veux me monter un système du genre… Thanks !
J’aurai juste une question, en terme d’occupation mémoire, CPU, etc, tu saurais sortir des bench ? Je me dis que fonction de cela, je peux réfléchir à intégrer ça à un module plus léger qu’un rasp (genre C.H.I.Ps https://getchip.com/pages/chip )
Vu que ça fait pas grand chose en temps normal, ça doit passer sur un CHIPS, oui. Ca marche bien sur un Pi classique, et le CHIPS est plus puissant
L’antispam fonctionne mais impossible d’avoir les log sur l’interface d’administration.
Dans « caller.dat » on peut voir cet exemple pour un numéro inconnu :
–DATE = 120816–TIME = 1458–NMBR = 0612345678–
Or dans l’exemple fourni par le développeur, la forme d’un numéro inconnu se forme ainsi :
–DATE = 022510–TIME = 1824–NMBR = 885–NAME = O–
Jcadmin ne détecte pas le numéro et ne l’affiche pas dans l’interface graphique.
Faudrait que je vérifie. Chez moi, le seul souci c’est si un étranger m’appelle : ça marche mal
J’ai corrigé le problème, mais attention cela fonctionne uniquement avec une livebox 3 : j’ai pas testé avec les autres box.
Il faut modifier le fichier jcblockAT.c, pour éviter des erreurs de recopie voici le code : http://pastebin.com/XswJSrB5
Ensuite il faut recompiler : « ./makejcblockAT »
Lors de l’execution, le programme écrit maintenant « –DATE = 120916–TIME = 1120–NMBR = 0612345678–NAME = O– » dans caller.dat.
Si le numéro est connu « jcadmin » fait automatiquement le lien entre le numéro et le nom.
J’ai remarqué qu’il n’était pas possible de blacklister depuis le téléphone : en pressant la touche *.
Même problème que tout à l’heure, le programme est bloqué car il n’y a pas de « Name ».
Je l’ai rajouté dans le code et maintenant cela fonctionne à merveille : http://pastebin.com/vEEYUf2v
Il faut modifier le fichier jcblockAT.c et ensuite recompiler : “./makejcblockAT”
Je rappel que je n’ai pas testé avec des box autre que la livebox 3.
Pourquoi vous n’utilisez pas l’api de katia.ch?
j’ai un système similaire et connecté à leur api je n’ai pas besoin de maintenir une base de données manuellement.
Pour mon première commentaire, je tiens à remercier notre lapin dont le blog est devenu mon premier réflexe du matin.
J’ai tenté l’expérience avec un Raspberry Pi B et le modem Sodial que j’ai commandé sur Amazon seul lien de l’article où le produit est toujours disponible. Mais au branchement de la bête au Raspberry Pi, j’ai eu une mauvaise surprise. Il s’agit d’un soft modem (son électronique est simplifiée au maximum et il laisse la majorité du boulot au système d’exploitation) dont aucun driver n’est disponible pour Raspbian. J’ai donc rechercher un autre modem en prenant garde cette fois ci à ce qu’il s’agisse bien d’un « hardware based » modem. J’ai finalement commandé le modem de la marque IIEasy toujours disponible chez Amazon mais via un autre lien que celui indiqué dans l’article.
Autre point à faire attention la compilation du script jcblockAt échoue sous Raspbian 9 mais est fonctionelle sous Raspbian 8.
Nouvelle désillusion, bien que tout se passe bien à l’installation / compilation, le journal d’appel reste desserrement vide avec mon installation, peut être que cela vient du protocole de ma box qui serait incompatible avec le script présenté ici.
Je me rabat sur la solution https://github.com/pamapa/callblocker dont l’ergonomie est selon moins un peu moins réussie et n’est pas absente de quelques légers bugs mais qui a le mérite d’être fonctionnelle sur mon installation.
bonsoir
j’ai une livebox 3 et je souhaiterai savoir comment connecter mon pi
cdt
n3rd, est-ce que ton « soft » modem Sodial fonctionne en utilisant callblocker ? ou seul le IIEasy a fonctionné?
@Pierre Dandumont Avez-vous eu l’occasion de tester la fonction « voice » depuis rasberry d’un des modem usb que vous proposez ?
Bonjour à tous,
J’ai un soucis car mon installation ne fonctionne pas. Quand je regarde les log de jcblock, je vois bien des traces de mes appel sauf que l’année ne s’ajoute pas à la date alors que dans le code de jcblock AT.c il a bien une partie pour l’ajout des 2 carctères de l’année… Du coup ma date reste a 4 caractères.
Je ne sais pas si c’est pour cela, mais je n’ai rien qui rentre dans callerID.dat
Quelqu’un a t’il une idée?