routeur4g.fr est financé par ses lecteurs. Quand vous achetez en passant par les liens du site, nous pouvons toucher une commission d’affiliation.
[TUTO] Envoyer des SMS en ligne de commande
oga83
Membre Messages: 1121
J'ai écrit un script pour envoyer des SMS en ligne de commande sous Linux.
Pour l'utiliser, il suffit de lui passer les paramètres suivants :
- L'adresse IP du routeur
- Le nom d'utilisateur (généralement admin)
- Le mot de passe de l'utilisateur
- Le n° de téléphone vers lequel on veut envoyer un SMS (sans espaces)
- Le contenu du SMS
Par exemple :
Pour l'utiliser, il suffit de lui passer les paramètres suivants :
- L'adresse IP du routeur
- Le nom d'utilisateur (généralement admin)
- Le mot de passe de l'utilisateur
- Le n° de téléphone vers lequel on veut envoyer un SMS (sans espaces)
- Le contenu du SMS
Par exemple :
./sendsms_huawei.sh 192.168.0.1 admin MonMotDePasse 0601020304 'Exemple de SMS'
Le script sendsms_huawei.sh se trouve dans l'archive zip ci-dessous.
Il est également possible de le faire sans script, avec Huawei Monitor, en utilisant l'url suivante :
<a rel="nofollow" href="http://192.168.0.1:8080/sms/send.aspx?tel=0601020304&message=Exemple de SMS"><code>http://x.x.x.x:8080
/sms/send.aspx?tel=0601020304&message=Exemple de SMSoù x.x.x.x est l'adresse IP de la machine sur laquelle fonctionne Huawei Monitor (pas celle du routeur !).
L'avantage de cette dernière méthode est qu'elle peut facilement être utilisée sous Windows en téléchargeant l'utilitaire wget :
/sms/send.aspx?tel=0601020304&message=Exemple de SMS"<div><code>wget "<code>http://x.x.x.x:8080
Voir également un autre exemple d'utilisation ici.
Si ce genre de post vous plait, n'oubliez pas de le promotionner pour que j'en fasse d'autres !
Message edité par ludovick on
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je ne l'ai pas encore testé je suis au taf mais en lisant le code ces 2 grep me semblent curieux
Tu reçois vraiment __RequestVerificationTokenone et __RequestVerificationToke comme noms de headers dans la response HTTP ?
J'aurais plutôt pensé à à __RequestVerificationToken non ?
Voilà les différentes commandes que j'ai essayé sans succès :
Du coup j'ai mis le mdp directement dans le code HTML du FORM que tu postes au router et pas mieux.
Je vais creuser quand j'aurais un moment.
En tout cas AUCUNE urgence de mon coté alors ne stresses pas sur le correctif
Est ce qu'il y a une limitation en nombre de SMS envoyé, par HM (version gratuite) ?
car avec la commande http GET sur mon Flow Node Red:
j'ai un retour de mon application apres 4 SMS envoyés :
Note : l'envoi de SMS depuis HM marche bien .
Merci
cat: /tmp/headers.tmp: Aucun fichier ou dossier de ce type
Remplacer "CREDENTIALS=`printf $ROUTER_PASSWORD | sha256sum | head -c64 | base64 -w0`"
par "CREDENTIALS=`printf %s $ROUTER_PASSWORD | sha256sum | head -c64 | base64 -w0`"
On précise à printf que la variable $ROUTER_PASSWORD est de type string avec l'argument %s.
Je pense qu'il s'agit d'un oubli
Ça fonctionne pour moi !
Merci à oga83 pour cette exemple de script utilisant les api huawei.
Est ce qu'un possesseur de B315s22 à réussi à se logger avec ce code?
Je ne suis pas encore sous linux, mais encore sous terminal Mac, les commandes sont un peu différentes, je les adapte, mais ce qui m'étonne surtout ce sont les requêtes à envoyer pour mon B315s22.
Si je regarde les requêtes qu'envoi Firefox quand je me log avec mon mot de passe, elles ne correspondent pas du tout à ce script:
Le GET pour récupérer le premier Token et le Cookie, c'est ok.
Mais le POST 'challenge_login' envoi la requête:
<?xml version="1.0" encoding="UTF-8"?>
<request>
<username>admin</username><firstnonce>3e8a19dadd5824468b805a6892505ef9b9c19729c4258b71fbee1b06ecf543e5</firstnonce><mode>1</mode>
</request>
Je suppose qu'à ce moment là on récupère un code 'salt et 'servernonce' dans la 'response'. Et qu'il faut le crypter pour créer un 'clientproof'.
En même temps le POST 'authentication_login' envoi:
<?xml version="1.0" encoding="UTF-8"?>
<request><clientproof>aa3e793d0ce66c8736e38154a938d270c08c90d79e7e9592afc702d01d71ef17</clientproof><finalnonce>3e8a19dadd5824468b805a6892505ef9b9c19729c4258b71fbee1b06ecf543e54LtkDOHC6WwFKPjDCeDCdaLC6MD9cdJw</finalnonce>
</request>
Concernant le premier hashage de mot de passe (3e8a… …), j'ai cherché à savoir comment il pouvait être crypté, j'ai trouvé ceci:
https://gist.github.com/magicdude4eva/5a8d14fe7c08262408e0356953a617cb
C'est en php et beaucoup trop pointu pour un amateur comme moi. Ce code serait pour un B618, routeur plus évolué que mon B315, ça m'étonne que je sois obligé de hasher autant le mot de passe.
J'ai bien essayé avec la méthode du script au dessus (hash 256, base64 … etc…), mais rien ne correspond.
Pour info. Aujourd'hui je peux récupérer sous bash et grâce à un petit script (écrit avec les pieds mais qui marche :-) qui ressemble à la commande ping, toutes les infos qui ne nécessitent pas de mot de passe.
Mais j'aimerais bien me logger au routeur pour lui envoyer des requêtes.
Aussi, si à tout hasard un programmeur avait un début d'info là dessus, je suis preneur. Merci d'avance.
Non le script ne fonctionne pas, sous bash Mac sha256sum n'est pas une commande reconnu par exemple.
J'ai tenté d'adapter ce script, comme ceci:
(j'ai juste appelé la variable différemment pour voir si ça fonctionne, mais même avec CREDENTIALS c'est pareil)
Les cookie et token sont d'une session réelle.
En essayant avec des décodeurs (hash 256 et base64) en ligne, je trouve le même résultat, donc je suppose que l'adaptation de mon code fonctionne… Je suppose…
Est ce que vous pouvez valider le script de hashage avec les mêmes mot de passe, cookie, token avec le script sous linux, svp?
Il récupère bien le SessionID et le premier Token, mais ne va pas plus loin car bash ne comprend pas les arguments de la commande grep, je pense.
Le mot de passe utilisé ici est réel et reconnu correctement avec un navigateur. Je mets un numéro bidon, puisqu'il ne va pas plus loin que le hashage.
En recherchant le premier script qui m'a permis de récupérer les données hors logging, je l'exécute tel quel (par reflex) et voit qu'il fonctionne, alors qu'il envoi un cryptage de type 1 (hash 256 seulement) et un mot de passe qui n'est pas le mien 0_o
Après un redémarrage (au bonton, pas via l'interface), je peux encore activer ou non la connexion data.
Toujours avec un mot de passe qui n'est pas le mien…
Si je modifie le mot de passe, il me renvoie une erreur 125002.
Ce routeur à été débloqué par des chinois pour fonctionner sur tout opérateurs, peut-être il y a t-il une porte qui à été laissé ouverte.
Si d'autres propriétaire de B315 pouvait faire l'essai…
Apparemment…
10.13 une old version?… 😊
Du coup sha256 et base64 devrait mieux fonctionner?
J'ai refait un test de la commande sha256 après avoir installé coreutils, mais c'est toujours pareil.
J'ai rééxécuté le script sendsms_huawei et j'ai la même réponse.
'MonMotDePasse' crypté en sha256 puis en base64 puis coupé en 64 bits, ça me donne:
NTZhZDgwNDg4MmExOGI2M2RjZTg3MjIyMTRmNTAwZTA1ZTlkOWViM2JlMjQ1NGVj
Si je le vérifie ici, ça correspond… :-/
https://coding.tools/fr/base64-encode
Je vais essayer de remettre tout ça dans un curl POST.
PS: j'ai dit une connerie en haut: YWRtaW4= correspond à un codage de 'admin' en base 64 et pas en sha256.
Un grand merci à oga83 pour son script bash.
J'ai réalisé de fil en aiguille une petite appli Windows qui permets de gérer les SMS depuis la zone de notif, et surtout d'être notifié dès qu'un nouveau SMS est dans la boite !
Du coup je me suis dit que ça pourrait en intéresser d'autres...
Voilà le lien vers le projet : https://github.com/jibap/B525-SMSManager
Pour l'instant j'ai fait du traitement global (suppression/marquage pour tous les SMS) mais une prochaine version (quand je trouverai le temps) permettra de faire les actions sur un seul SMS puis une V3 pour une sélection dans la liste...
A+
Bonjour Jacques,
Ou pouvons nous charger votre script/programme ?
Je suis intéressé pour faire des tests, et utiliser le router en envoi de SMS via un ERP, qui générera des envois de SMS en ligne de commande 😅
Petit message pour informer d'une mise à jour de mon petit programme auquel j'ai ajouté 2 nouveautés :
1 - Ajout d'une liste de contacts dans le fichier de config, ce qui permets d'afficher un label (nom, prénom ou tout ce qu'on veut) à la place du numéro de téléphone
2 - Ajout d'un interrupteur rapide dans le menu de la zone de notification et bouton dans l'interface permettant d'activer ou désactiver le wifi directement en un clic !
J'en ai également profité pour modifier le comportement de l'infobulle de Windows, au lieu d'une seule notif avec plusieurs extraits de chaque SMS, chaque SMS a sa propre notif, ce qui permets de voir plus du message...