Outils pour utilisateurs

Outils du site


issue94:blocage_d_appels

Article

TITRE : Blocage d'appels, une solution à deux modems

I haven't heard from him, so I have to assume Greg is still feeling a bit under the weather this month. Feel free to email him some get well soon messages: greg.gregwa@gmail.com Solution to what, you may ask. Why, nuisance telephone calls, of course. Politicians, telemarketers, charities, and too many others have my telephone number. They're not paying my phone bill, so it costs them next to nothing for their auto-dialers to ring my phone to ask for money. For several years, I toyed with the idea of answering such calls with a modem pretending to be a fax machine. I figured that the squeals would alert their software to remove my number from their vast databases. This year (sadly after the flurry of pre-election calls), I managed to partially complete such a toy. Since current computers no longer have DB-25 serial connections, I hastily bought a USB modem on eBay. Having mistakenly believed that all modems have both a “line” and an extension RJ-11 jack, back I went to eBay for another modem. This time what the Chinese vendor called a “two-port” model cost only a bit more than the one I had. When it arrived, the experiments began. Weeks went by as I tried various Linux programs to monitor our landline, read the caller ID (CID), check it against a blacklist to blast the modem synch tones to the unwary, if hopeful, scavenger on the other end.

Puisque je n'ai toujours pas eu de ses nouvelles, je suppose que Greg ne se sent pas encore dans son assiette ce mois-ci. N'hésitez pas à lui envoyer des messages de prompt rétablissement à : greg.gregwa@gmail.com

Solution contre quoi ? Vous pouvez vous le demander. Eh bien, contre les appels téléphoniques non sollicités et ennuyeux, bien sûr. Les politiciens, les télévendeurs, les organismes de bienfaisance et un trop grand nombre d'autres personnes ont mon numéro de téléphone. Ils ne payent pas ma facture de téléphone, de sorte qu'il ne leur coûte à peu près rien pour que leurs composeurs automatiques fassent sonner mon téléphone pour demander de l'argent.

Depuis plusieurs années, j'ai joué avec l'idée de répondre à ces appels avec un modem simulant un fax. Je pensais que la sonnerie alerterait leur logiciel qui, ainsi, supprimerait mon numéro de leurs énormes bases de données.

Cette année (malheureusement après la vague d'appels pré-électoraux), j'ai réussi à terminer partiellement un tel jouet. Puisque les ordinateurs actuels n'ont plus de connecteur DB-25 en série, j'ai acheté en vitesse un modem USB sur eBay.

Ayant cru à tort que tous les modems avaient à la fois une « ligne » et un connecteur RJ-11 d'extension, je suis retourné sur eBay pour acheter un autre modem. Cette fois-ci, ce que le vendeur chinois appelait un modèle « deux-ports » n'a coûté qu'un peu plus que celui que j'avais. Dès son arrivée, les expériences ont commencé.

Les semaines passèrent pendant que j'essayais divers programmes Linux pour surveiller notre ligne fixe, lire l'identification de l'appelant (CID), vérifier dans une liste noire pour déclencher les sons de synchronisation du modem pour les rapaces sans méfiance, voire plein d'espoir, à l'autre bout.

I finally settled on picocom for the monitor function, minicom for setup, and modem-cmd to do the auto-answer and blast job. After many hours of writing bash scripts, testing and rewriting, I learned that: 1. Picocom does not like running in the background. 2. Picocom has no logging feature, necessary for passing events by file. 3. Modem answer and hang up commands interfere with the modem's monitoring. 4. The Expect language was mysterious for me. 5. Even bash has some squirrely comparison rules. 6. The embedded USB modem code does not fully implement the Hayes command set. (But it's adequate for my purposes.) Lesson one: Picocom wants its own tty for starting/running. Dedicate a terminal just for it. Lesson two: A patch (diff) to implement logging is available for picocom and it's easy to apply, even for a noob like me. My picocom log file is named CID.log, but it can be any file spec. Lesson three: The port-capturing nature of serial I/O forced me either to suspend monitoring or to use a second line attachment. I thought I could switch between monitoring and answering in a script, but picocom would not function for me when started by a script. So here's where the second modem comes in. (I have two now, you know.) The one-port modem connects to the extension port of the two-port modem. The two-port modem's “line” port connects to the phone line. Picocom monitors the two-port, while modem-cmd answers and hangs up the “extension” using the second modem. Of course, both modems are really on an “extension” but they neither know nor care.

J'ai finalement choisi picocom pour la fonction de surveillance, minicom pour la configuration, et le modem-cmd pour faire les tâches de réponse automatique et émettre les sons. Après plusieurs heures d'écriture de scripts bash, de tests et de réécriture, j'ai appris que:

1. picocom n'aime pas être en tâche de fond ; 2. picocom n'a pas de fonction de journalisation, nécessaire pour passer les événements par fichier ; 3. les commandes de réponse et de raccrochement du modem interfèrent avec la surveillance du modem ; 4. le langage Expect me semblait mystérieux ; 5. Même bash a des règles de comparaison complètement folles ; 6. Le code du modem USB intégré n'applique pas pleinement le jeu de commandes Hayes. (Mais c'est suffisant pour mes besoins.)

Leçon une : picocom veut son propre tty pour démarrer. Consacrer un terminal à lui seul.

Leçon deux : un correctif (diff) pour mettre en œuvre la journalisation est disponible pour picocom et il est facile à appliquer, même pour un bleu comme moi. Mon fichier journal picocom se nomme CID.log, mais ça peut être tout autre nom.

Leçon trois : La nature de la capture du port d'E/S en série m'a obligé, soit à suspendre la surveillance, soit à utiliser une attache sur une seconde ligne. Je pensais que je pouvais basculer entre la surveillance et la réponse par un script, mais, lancé par un script, picocom ne voulait pas fonctionner pour moi .

C'est donc là que le second modem entre en jeu. (J'en ai deux maintenant, vous savez.) Le modem à un port se connecte au port d'extension du modem à deux ports. Le port « ligne » du modem à deux ports se connecte à la ligne téléphonique. Picocom surveille le modem à deux ports, tandis que modem-cmd répond et raccroche l'« extension » en utilisant le second modem. Bien sûr, les deux modems sont vraiment en « extension », mais ils ne le savent pas et n'en ont rien à faire.

These modems appear in my (Debian) /dev directory as ttyACM0 (the two-port) and ttyACM1 (the one-port). The command lines I use for the modems are: Set up minicom -s -D /dev/ttyACMx Monitor picocom -ilr –logfile /root/phone/CID.log /dev/ttyACM0 Pick up the phone modemcmd=`/usr/bin/modem-cmd /dev/ttyACM1 ~~ATA` Now hang up. modemcmd=`/usr/bin/modem-cmd /dev/ttyACM1 ~~ATH` Reset the modem modemcmd=`/usr/bin/modem-cmd /dev/ttyACM1 ~~ATZ`

Ces modems apparaissent dans mon répertoire (Debian) /dev comme ttyACM0 (le deux ports) et ttyACM1 (le monoport). Les lignes de commande que j'utilise pour les modems sont :

La configuration minicom -s -D /dev/ttyACMx

La surveillance picocom -ilr –logfile /root/phone/CID.log /dev/ttyACM0

Décrocher le téléphone modemcmd=`/usr/bin/modem-cmd /dev/ttyACM1 ~~ATA`

Raccrocher. modemcmd=`/usr/bin/modem-cmd /dev/ttyACM1 ~~ATH`

Remise à zéro modemcmd=`/usr/bin/modem-cmd /dev/ttyACM1 ~~ATZ`

These three modem commands are issued within a bash script after starting Picocom manually in a dedicated terminal window. The first, ATA, is used because the fax machine dream came to an end – it was too much trouble. Also, the modem was unwilling to dial without a dial tone. (Remember, it's answering a ringing phone.) Here's a sample of Picocom's output, including the CID block (four values) which arrive just before the second ring. That first call is a candidate for blacklisting. RING DATE = 1117 TIME = 1848 NMBR = 8009421970 NAME = TOLL FREE (The CID says that it's not blacklisted; let it ring.) RING RING DATE = 1118 TIME = 0931 NMBR = 8009421970 NAME = TOLL FREE RING

Ces trois commandes de modem sont lancées dans un script bash après avoir démarré picocom manuellement dans une fenêtre de terminal dédié. La première, ATA, est utilisée parce que mon rêve de fax a pris fin - c'était trop de tracas. De plus, le modem ne voulait pas numéroter sans tonalité. (Rappelez-vous, il répond à un téléphone qui sonne).

Voici un échantillon de la sortie de picocom, y compris le bloc CID (quatre valeurs) qui arrive juste avant la deuxième sonnerie. Ce premier appel est un candidat pour la liste noire.

RING DATE = 1117 TIME = 1848 NMBR = 8009421970 NAME = TOLL FREE (Le CID dit qu'il n'est pas en liste noire ; laissons le sonner.) RING RING DATE = 1118 TIME = 0931 NMBR = 8009421970 NAME = TOLL FREE RING

Ringmon, the program which issues the one-port modem commands (see above) is kicked off by incron. Incron is watching the CID.log file for the updates picocom makes. Ringmon starts Caller with a parameter “1” (Caller 1). Caller checks blacklist.srt to see whether it needs to intercept the call or just let the humans answer it. If the CALLERID is found in blacklist.srt, it calls Blackball. Blackball uses modem-cmd to function the modem to dial out. This stops the ring by answering the phone, producing a modem error because there's no ring tone. But that doesn't cause a problem. The modem is told to hang up after a few seconds, then it's reset. The remaining tasks (blacklist maintenance, call logging, etc.) are divided among several bash scripts and files. These programs make liberal use of cat, grep and tr, which simplify the code. To avoid permission problems, the whole system resides in /root/phone and /var/log. You may want to do something similar. The code is available here: https://www.dropbox.com/sh/yvbilaxpqoho57g/AACYRMwYhy9SM8NXpKVAQGHPa?dl=0.

Ringmon, le programme qui passe les commandes au modem monoport (voir ci-dessus) est lancé par incron. Incron surveille le fichier CID.log pour les mises à jour que picocom écrit. Ringmon lance Caller avec un paramètre « 1 » (Caller 1). Caller vérifie dans blacklist.srt pour voir s'il doit intercepter l'appel ou tout simplement laisser les humains répondre. Si le CALLERID se trouve dans blacklist.srt, il appelle Blackball. Blackball utilise modem-cmd pour faire composer un numéro par le modem. Cela arrête la sonnerie en répondant au téléphone, produisant une erreur de modem parce qu'il n'y a pas de tonalité. Mais cela ne pose pas de problème. On demande au modem de raccrocher après quelques secondes, puis il est remis à zéro.

Les autres tâches (maintenance de la liste noire, consignation d'appel, etc.) sont réparties entre plusieurs scripts bash et fichiers. Ces programmes utilisent beaucoup cat, grep et tr, ce qui simplifie le code. Pour éviter les problèmes d'autorisation, l'ensemble du système réside dans /root/phone et dans /var/log.

Si vous voulez faire quelque chose de semblable : le code est disponible ici: https://www.dropbox.com/sh/yvbilaxpqoho57g/AACYRMwYhy9SM8NXpKVAQGHPa?dl=0.

Encarts

Sample from /root.Phone/Namesub.txt 2027650882,Political Call 2028005670,Stop Hillary PA Sample from /root.Phone/Namesub.txt 2028005670,Stop Hillary PA 2028005696,Political Call Sample from my /var/log/caller.log: Seq Date Time Phone Formatted Caller, Blacklist flag 2021,1207,1838,8552067186,(855) 206-7186,American Legacy PA,1 2036,1208,1349,8009421970,(800) 942-1970,Presidential Coali,1 Sample from /var/log/blackmaint.log: 1205 TIME = 1433 Blacklist was sorted 5. 1231 at TIME = 1340 7207639906 blacklisted caller.log rebuilt 1231 TIME = 1412 Blackballed call from 8552067186 added to caller.log 0101 at TIME = 1057 Here's the maintenance screen: ************************************************************ * Executing /root/phone/scripts/Blackmaint * ************************************************************ 1. View TODAY's logged CALLS 2. View ALL CALLS in log 3. View ALL CALLS in log sorted by date, time 4. View all phone numbers in the BLACKLIST --------------------------------------- 5. ADD the LAST caller to the blacklist 6. ADD a RECENT caller to the blacklist 7. ADD a 10-digit phone no. to the blacklist 8. REMOVE a number from blacklist.txt 9. MATCH blacklisted numbers with Name Substitutes --------------------------------------- 10. STOP MONITORING calls (Killspicocom) 11. Kill Picocom, start Minicom on ACM0 12. Start Minicom on ACM1 13. Clean temporary CID files from /root/phone > Enter number of your choice or enter 'q' to quit.

Exemple de /root.Phone/Namesub.txt 2027650882,Political Call 2028005670,Stop Hillary PA Exemple de /root.Phone/Namesub.txt 2028005670,Stop Hillary PA 2028005696,Political Call Exemple de mon /var/log/caller.log: Seq Date Time Phone Formatted Caller, Blacklist flag 2021,1207,1838,8552067186,(855) 206-7186,American Legacy PA,1 2036,1208,1349,8009421970,(800) 942-1970,Presidential Coali,1 Exemple de /var/log/blackmaint.log: 1205 TIME = 1433 Blacklist was sorted 5. 1231 at TIME = 1340 7207639906 blacklisted caller.log rebuilt 1231 TIME = 1412 Blackballed call from 8552067186 added to caller.log 0101 at TIME = 1057 Voici l'écran de maintenance: ************************************************************ * Executing /root/phone/scripts/Blackmaint * ************************************************************ 1. View TODAY's logged CALLS [Voir les APPELS d'AUJOURD'HUI] 2. View ALL CALLS in log [Voir TOUS les APPELS dans le journal] 3. View ALL CALLS in log sorted by date, time [Voir TOUS les APPELS triés par date, heure] 4. View all phone numbers in the BLACKLIST [Voir tous les numéros de la LISTE NOIRE] --------------------------------------- 5. ADD the LAST caller to the blacklist [AJOUTER le DERNIER appelant en liste noire] 6. ADD a RECENT caller to the blacklist [AJOUTER une appelant RÉCENT en liste noire] 7. ADD a 10-digit phone no. to the blacklist [AJOUTER un numéro à 10 chiffres à la liste noire] 8. REMOVE a number from blacklist.txt [RETIRER un numéro de la liste noire] 9. MATCH blacklisted numbers with Name Substitutes [SUBSTITUER les noms aux numéros en liste noire] --------------------------------------- 10. STOP MONITORING calls (Killspicocom) [ARRETER de SURVEILLER les appels] 11. Kill Picocom, start Minicom on ACM0 [Tuer picocom, démarrer minicom sur ACM0] 12. Start Minicom on ACM1 [Démarrer minicom sur ACM1] 13. Clean temporary CID files from /root/phone [Nettoyer les fichiers temporaires de /root/phone] > Enter number of your choice or enter 'q' to quit. [Entrer le numéro choisi ou 'q' pour sortir]

LIST OF PROGRAMS File spec. Function /root/phone/Ringmon Initiated by inchron, reads CID.log, waits for CID, starts Caller /root/phone/maint-scripts/Caller Builds caller.log record, callsBlackball. Also rebuilds entire caller.log from CID.log and Namesub.txt. /root/phone/maint-scripts/Blackmaint Adds numbers to blacklist, sorts it, etc. /root/phone/Blackball Commands second modem to answer and hang up. Available from repositories: minicom Modem setup modem-cmd Output simple commands to second modem inchron Program (Ringmon) initiation nano Misc.file edits picocom Monitor phone line sed Phone number formatting to (XXX) xxx-xxxx tr, grep File editing LIST OF FILES File spec. Function /root/phone/CID.log Picocom's log file; monitored by inchron /root/phone/CID1.sav Backup of CID.log /root/phone/blacklist.txt Blacklisted phone numbers, manual name substitutions /root/phone/blacklist.srt Sorted (by phone #) version of above /root/phone/Namesub.txt Aliases for phone numbers (from Internet); maintained manually /root/phone/CID.grep, CID.tr1, etc. temp files re-created at each phone call /var/log/caller.log Logs all calls with date, time, substitute name, etc. /var/log/blackmaint.log Logs activities of Caller, Blackmaint and Blackball

LISTE DES PROGRAMMES Fichier Fonction /root/phone/Ringmon Initié par inchron, lit CID.log, attend CID, démarre Caller /root/phone/maint-scripts/Caller Fait rapport dans caller.log record, appel Blackball. Refait également tout le caller.log à partir du CID.log et de Namesub.txt. /root/phone/maint-scripts/Blackmaint Ajoute numéros à la lise noire, la trie, etc. /root/phone/Blackball Commande au deuxième modem de répondre et de raccrocher. Disponibles dans les dépôts : minicom Paramétrage du modem modem-cmd Envoie des commandes simples au deuxième modem inchron Initiation du programme (Ringmon) nano Changements dans Misc.file picocom Surveille la ligne téléphonique sed Formatage des numéros à (XXX) xxx-xxxx tr, grep Édition de fichiers LISTE DES FICHIERS Fichier Fonction /root/phone/CID.log Journal de Picocom; surveillé par inchron /root/phone/CID1.sav Sauvegarde de CID.log /root/phone/blacklist.txt Numéros en liste noire, substitution des noms manuelle /root/phone/blacklist.srt Verison du fichier ci-dessus triée (par numéro de tél) /root/phone/Namesub.txt Alias des numéros (venant d'Internet) ; mis à jour à la main /root/phone/CID.grep, CID.tr1, etc. Fichiers temporaires re-créés à chaque appel /var/log/caller.log Journal des appels avec la date, l'heure, le nom, etc. /var/log/blackmaint.log Journal d'activité de Caller, Blackmaint et Blackball

issue94/blocage_d_appels.txt · Dernière modification : 2015/04/03 19:02 de d52fr