Longtemps assez dégoûté du peu d’ergonomie de RouterOS, le firmware des matériels Mikrotik, j’ai été contraint de passer énormément de temps pour chercher à mieux le comprendre. Désormais, maitrisant le système, il est facile de venir développer des solutions originales, comme la gamme Wifipak Mini par exemple, et ce n’est pas terminé.

Wifipak Mini + 4 bornes PoE

C’est souvent en expérimentant qu’arrivent souvent les idées intéressantes. Tenez, là il est question d’aller générer des utilisateurs à la volée dans le User Manager de Mikrotik, depuis un script Python sur un Raspberry Pi, et pourquoi pas le Raspberry Pi utilisé comme enregistreur de connexions tiens !

Prenons donc notre Mikrotik préconfiguré en hotspot, muni de son User Manager, sans mot de passe, avec l’IP 192.168.1.123. Depuis notre Raspberry Pi, nous allons créer le script Python mikro.py après avoir installé au préalable Paramiko (je vous laisse chercher un peu sur Google, c’est assez simple) :

from random import choice
from string import digits
from string import ascii_lowercase
import paramiko
import time
target = '192.168.1.123'
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(target, username='admin', password='', look_for_keys=False)
for x in range(0,10):
  login=''.join(choice(ascii_lowercase) for i in range(4))
  mdp=''.join(choice(ascii_lowercase) for i in range(4))
  msg = "/tool user-manager user add customer=admin username=us" + login + " password=" + mdp
  msg2 = "/tool user-manager user create-and-activate-profile us" + login + " customer=admin profile=wifipakmini"
  stdin,stdout,stderr = ssh.exec_command(msg)
  stdin,stdout,stderr = ssh.exec_command(msg2)
  time.sleep(0.8)
  stdin,stdout,stderr = ssh.exec_command(msg2)

A chaque exécution du script, nous allons générer deux variables, login et mdp contenant respectivement le login et le mot de passe d’un utilisateur. Cet utilisateur va être créé dans le gestionnaire Mikrotik et sera affecté au profile wifipakmini qui indique le temps disponible en ligne, 1 minute pour les essais.

Sur notre Mikrotik de test, peu puissant, une pause est nécessaire, ainsi qu’une répétition des commandes, sans cela certains utilisateurs ne sont pas affectés au profil wifipakmini et ne fonctionnent donc pas.

Ce script tourne 10 fois et va au final générer 10 utilisateurs d’un coup avec des logins qui débutent par “us”. Quel intérêt puisque le gestionnaire intégré permet de le faire ? Réfléchissez un peu, imaginez les possibilités et vous trouverez des applications potentiellement intéressantes.. En effet, si toi, ami Geek, tu es capable d’aller gérer en direct depuis le gestionnaire, quid de Mme Michu, paumée au fin fond de la Creuse, sans connaissances poussées en hotspot ? Ne va-t-elle pas préférer générer ses utilisateurs automatiquement et dans un langage clair, via une p’tite page html sur le Raspberry Pi par exemple ?

Allez, poussons un peu plus notre script, avec cette fois un nouveau, efface.py, qui sera lancé deux fois par jour par un simple Crontab sur le Raspberry Pi :

import paramiko
target = '192.168.1.123'
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(target, username='admin', password='', look_for_keys=False)
msg = "/tool user-manager user remove [find uptime-used=1m]"
stdin,stdout,stderr = ssh.exec_command(msg)
print stdout.read()

Ici, nous allons chercher tous les utilisateurs ayant utilisé leur temps de connexion, 1m (= 1 minute) pour nos essais, mais ce peut-être 1d (= 1 jour) si vous modifiez le profil wifipakmini du gestionnaire Mikrotik. Tous les utilisateurs ayant la mention 1m dans uptime-used (= temps de connexion utilisé) seront ainsi effacés, évitant de saturer le hotspot avec des codes dévalidés.

Et après ?

Eh oui, tout ceci est bien mimi, c’est choupinou de générer des scripts, des utilisateurs, le principe fonctionne, mais après, que faire ? Imaginons par exemple que nous allons générer des planches avec tous les codes regroupés sur une seule et même feuille : le script se lance, une planche s’affiche en pdf ou en png, vous l’imprimez, tout ceci de façon simple, via un bout de script Php sur le Raspberry Pi, chargé de lancer toutes les actions.

Imaginons également que l’on vienne brancher une imprimante à tickets sur le Raspberry Pi : vous allez ainsi pouvoir générer un ticket à volonté, pourquoi pas en n’appuyant que sur un simple bouton installé sur la p’tite framboise. Et hop, un hotspot avec imprimante à ticket, pour un coût réduit, largement inférieur aux solutions commerciales habituelles, tel ce pack Zyxel vendu près de 1900 € avec enregistreur, WiFi local et imprimante :

Avec un calcul rapide et pas du tout optimisé, une solution équivalente pourrait sortir à bien moins cher, plus de deux fois moins cher en tout cas.

Vous le voyez, se creuser la tête avec des produits issus du monde libre permet de pas mal s’amuser. Le Raspberry Pi est un allié précieux pour développer, sa petite taille et sa modularité en font un outil indispensable pour développer de nouveaux projets.