Introduction
L'USSD (Universal Structured Service D) est un service des réseaux télécoms defini dans 3GPP TS 02.90 et dans 3GPP TS 23.090. Il permet à un terminal mobile d'effectuer des requetes ou une suite de requete à l'operateur. Il est courament utiliser pour consulter le solde.Dans ce tutoriel nous apprendrons à effectuer des requetes USSD depuis une connection serie avec une modem.
Pré requis
Pour utiliserons pour ce faire:- un modem GSM (Huawei E1552) bien sur avec une carte SIM
(AIRTEL Burkina)
- un ordinateur auquel sera connecte le modem
- un terminal (minicom) pour dialoger avec le modem depuis
l'ordinateur
- perl, pour encoder et decoder les PDU
Demarche
Nous allons consulter le solde du compte de l'utilisateur. Pour l'opérateur courant il faut composer le code USSD *160#.connecter le modem
Connectez le modem au port USB de l'ordinateur et retrouvez ses port series logiciels. Notre modem créé trois ports series (/dev/ttyUSB0, /dev/ttyUSB1, /dev/ttyUSB2). Nous utiliserons le dernier port. Lancons ensuite minicom et configurons le port serie à utiliser.Illustration 1: Connection au modem avec minicom
encoder le message
La commande suivante permet de convertir un texte courant au format PDU:
perl -e
'@a=split(//,unpack("b*","*160#")); for
($i=7; $i < $#a; $i+=8) { $a[$i]="" } print
uc(unpack("H*", pack("b*", join("",
@a))))."\n"'
Ainsi *160# correspond à AA980D3602.Illustration 2: Execution de conversion du code USSD au format PDU
effectuer la requete
La commande AT à envoyer au modem pour une requete USSD est le suivant:AT+CUSD=1,commande
,
15Pour notre cas, nous aurons:
AT+CUSD=1,AA980D3602,15
Nous obtenons comme resultat:
D6375D5E06CDDF6C725937C3C1404363D0054ABAE965B9BB4CD7C140CD370855C4C375A5
Illustration 3: resultat de la commande AT
Et nous obtenons: “Votre solde:380 CFA. Internet:0 Mo...”
D6375D5E06CDDF6C725937C3C1404363D0054ABAE965B9BB4CD7C140CD370855C4C375A5
Illustration 3: resultat de la commande AT
decoder le message
Nous pouvons décoder le message du format PDU au format humainement comprehensible avec la commande perl:
perl -e
'@a=split(//,unpack("b*",
pack("H*","D6375D5E06CDDF6C725937C3C1404363D0054ABAE965B9BB4CD7C140CD370855C4C375A5")));
for ($i=6; $i < $#a; $i+=7) {$a[$i].="0" } print
pack("b*", join("", @a)).""'
Et nous obtenons: “Votre solde:380 CFA. Internet:0 Mo...”
Conclusion
Nous avons envoyer la commande USSD *160# et nous
avons reçu la reponse “Votre solde:380 CFA. Internet:0 Mo...” en
utilisant la commande AT “AT+CUSD” et des programmes pour les
conversion de format.
Commentaires