adv a écrit : 29 mars 2022, 11:39
Je viens de trouver "callattendant" sur GitHub qui a l'air excellent et supporté.
Ce que j'ai fait est dans le même ordre d'idée pour la partie filtrage, je dirais en mieux de ce côté (plus adapté au contexte français: Box avec base DECT, plages d'allocation publiées en open data par l'ARCEP...) et en plus simple pour le reste (pas de répondeur, juste génération d'une page web simple des listes de numéros bloqués car Domoticz fait la partie serveur web, etc) n'ayant pas ces besoins. Sans doute plus de flexibilité aussi dans la configuration modem sans devoir modifier le code (important: Ces modem voix sont plein de subtilités... et de bugs!).
C'est en premier lieu adapté à la Livebox qui, faisant base DECT, a le bon goût de remplir les champs du caller ID avec l'annuaire de ses téléphones fixes DECT associés. Dès lors, facile pour commencer de laisser passer les numéros de ses contacts sans aucun filtrage. Je ne sais pas si d'autres box font base DECT et savent générer un caller ID de la même manière.
Certaines box plus libres côté implémentation SIP permettraient peut-être d'ailleurs d'y récupérer un Caller ID sans aucun matériel spécifique à connecter au RJ11 ancestral de la Box. A voir. Là dessus Orange nous casse un peu les couilles (pas de possibilité de téléphoner depuis sont PC, comme Free le propose).
Au delà de ces contacts (whitelist automatique en fait), il y a une blacklist possible par numéros, préfixes complets (genre une plage d'allocation ARCEP) voir identifiant d'opérateur (les opérateurs VoIP qui nous emmerdent ayant en général plusieurs plages d'allocation attribuées, ainsi on les barre toutes!).
Cela permet aussi à ce stade de filtrer les numéros n'appartenant à aucune plage d'allocation ARCEP, ceux-ci étant manifestement usurpés/spoofés.
Ces blacklist pouvant être générées à la main au alimentées automatiquement car si un numéro n'est pas filtré à ce stade, un check en ligne est fait via doisjerepondre.fr (de manière analogue à callattendant, utilisant le module python beautifulsoup pour parser la page web de retour et récupérer la classification du numéro ; callattendant utilise pour sa part nomorobo.com ; aucune idée de sa pertinence pour des numéros français).
Et selon le résultat de ce check et la configuration, un score négatif peut mener à ajouter un numéro simple à la blacklist ou une plage d'allocation complète (le plus souvent 10k numéros suivant un préfixe du genre 012030XXXX). Je n'ai pas automatisé l'ajout d'un opérateur complet, certaines plages d'opérateurs grand public étant utilisées (ou usurpées) pour du spam téléphonique et barrer tout FT/BOUYGUES/SFR/FREE serait un peu violent!
=> Quand il commence à y avoir bcp de numéros/plages d'un obscur opérateur (non grand public) blacklistées, j'édite la config (fichier YML) manuellement pour retirer ces plages et ajouter l'identifiant (abrégé en 4 lettres dans les fichiers ARCEP) coté blacklist opérateurs. Ces plages ARCEP sont MAJ mensuellement (un fichier XML récupérable sur leur site, qu'un script+cron check tous les 15j, puis expurge/mets en forme au format CSV pour utilisation directe par le service de filtrage), on obtient cela:
Code : Tout sélectionner
"EZABPQM","Mnémo"
"0105","FRTE"
"01241","FRTE"
"01242","FRTE"
"013000","FRTE"
"013001","FRTE"
"013002","FRTE"
"013003","FRTE"
...
Forcément, au debut y'a que l'opérateur historique qui n'est ici toujours pas Orange (FRTE = FRance TElecom)!
Actuellement y'a ~30k plages d'allocation et c'est ordonné donc le parcours reste rapide:
Code : Tout sélectionner
~/scripts $ wc -l providerPrefixes.csv
30107 providerPrefixes.csv
C'est certes violent, mais efficace. Et au bout de qq semaines/mois, le besoin d'interroger doisjrepondre.fr devient de plus en plus rare rendant le système plus réactif (filtrage dès la 1ère sonnerie au lieu de 2) et évitant de devoir se fader une BDD, comme callattendant le fait: Des listes dans le fichier de config du service suffisent alors sans prendre trop de place en mémoire.
Comme indiqué, j'avais ajouté aussi la possibilité pour Domoticz de faire sonner nos mobiles si l'alarme déclenche via le modem également. Il y a donc une liste de numéros appelés séquentiellement dans ce cas niveau config du service de filtrage. Le principe est simple côté Domoticz: Un signal SIGUSR1 (forme sans doute la plus primitive de communication inter-processus, mais ici largement suffisante) est envoyé par le script Lua qui implémente la partie alarme dans Domoticz au service python (phoneFilter.py) via:
Code : Tout sélectionner
phoneAlarmCmd = 'pkill -10 -f "python.*phoneFilter.py"&'
os.execute(phoneAlarmCmd)
Pas de pb pour filer des sources au besoin, en direct ou via un compte github qui m'a déjà servi à pousser des configs open-zwave mais sans rien de perso dedans. Pas immédiatement mais possible. Support demerden zizich sur pb spécifique au modem, par contre. Le mien est basé Connexant. Un conseil si tu va sur callattendant, achète celui qu'ils utilisent, US Robotics, ça évitera bien des soucis si toutefois on trouve encore un libre choix de ces machins datant d'avant l'ADSL.