Certaines commandes DTMF sont réservées uniquement aux administrateurs du relais. Un code tournant, qui change toutes les minutes, sera reconnu par le relais. L'administrateur utilise un générateur de code, soit sur son navigateur internet, soit sur son smartphone Android. Les installations (relais et PC, smartphone) doivent être à la même heure. L'algorithme de création de code tournant se réfère à l'heure courante.
Le logiciel Code Sysop pour Android
Télécharger le fichier apk à installer sur votre mobile android. Il vous permet de connaitre votre code de sécurité.
- Télécharger le fichier sysop_code_apk.zip
- Dezipper sysop_code_apk.zip
- Installer
Vidéo de démonstration
Le logiciel Code Sysop pour navigateur internet
Code de génération de code tournant
- | /usr/share/svxlink/modules.d/accesscode.py
"""" " SVXLINK SYSOP ROLLING CODE " SVXLink Card on http://svxcard.f5uii.net " " This Python software generate a unique code, valid only for 3 minutes. It will secure your system operator DTMF remote commands. " Requires that your Raspberry Pi is clock synchronised. " 08.02.2016 (b)- Christian, F5UII " version 0.1 - Under Creative Commons licence [by-nc-sa] http://creativecommons.org/licenses/by-nc-sa/4.0/ " """ import time import math from datetime import datetime, timedelta a = time.localtime() COMPLEXITY_CODE = 452 #Give a private complexity code. Remember to change this code for have your generated password personnal. minute1 = datetime.now() + timedelta(minutes=1) minute_1 = datetime.now() + timedelta(minutes=-1) datejour = time.strftime('%d') datemois = time.strftime('%m') dateannee= time.strftime('%y') heure = time.strftime('%H') min = time.strftime('%M') min_1 = minute_1.strftime('%M') min1 = minute1.strftime('%M') def codage(datejour,datemois,dateannee,heure,min): a=int(datejour)+int(datemois)+int(dateannee)+int(COMPLEXITY_CODE) b = a ^ (int(heure)+ int(min[1])*10+ int(min[0])) resu_b = b res = b - (math.floor(b/100))*100 resu_b= '%02d' %res c= int(datejour)*int(datemois) ^ (int(heure)*int(min)); resu_c = c res = c - (math.floor(c/100))*100 resu_c= '%02d' %res resu= str(resu_b).zfill(2) + str(resu_c).zfill(2) return resu file = open("/tmp/codes.tcl", "w") file.write( "set code_A " + codage (datejour,datemois,dateannee,heure,min_1) + ";") file.write( "set code_B " + codage (datejour,datemois,dateannee,heure,min) + ";") file.write( "set code_C " + codage (datejour,datemois,dateannee,heure,min1) + ";") file.close()
Code à insérer dans /usr/share/svxlink/events.d/local/Logic.tcl
proc dtmf_cmd_received {cmd} { set runcmd [exec sudo python /usr/share/svxlink/modules.d/accesscode.py 2>&1]; source "/tmp/codes.tcl"; set sysopcode [string range $cmd 0 3] set sscmd [string range $cmd 4 [string length $cmd]] puts "extrait $sysopcode $sscmd" if {($sysopcode == $code_A) || ($sysopcode == $code_B) || ($sysopcode == $code_C)} { #Sysop commands - 3 minutes window if {$sscmd == 11} { # Sysop command to switch relay exec echo 1 > /sys/class/gpio/gpio20/value } if {$sscmd == 10} { # Sysop command to switch relay exec echo 0 > /sys/class/gpio/gpio20/value } playMsg "Core" "please_identify"; return 1 } }
Exemple de contenu de codes.tcl
set code_A 9277;set code_B 7070;set code_C 7223;