NSE sprl
  • Accueil
  • Cameras
    • Mobotix
    • Legislation
  • MikroTik
    • Backup&Restore
    • BoutonReset
    • Scripts
  • Contact

Exemples de Scripts


Exemple 1 - Introduction - Retrouver l'IP de www.google.be

Introduction :
Les scripts (microprogrammes) font partie du contexte system scripts (Menu System/Script de Winbox). Ils vous  permettent de programmer le routeur pour qu’il exécute les tâches spécifiques dont vous avez besoin.
Un script est identifié par son nom et est composé d’une série d’instructions exécutées lignes après lignes.
Le script peut être exécuté à intervalles réguliers ou en fonction d’évènements. L’exécution à intervalles réguliers est programmée via le menu System/Scheduler de Winbox.
Les lignes du script ou le script en entier peuvent aussi être exécuté de façon interactive dans une fenêtre terminal (Menu New Terminal dans Winbox pour ouvrir une session Terminal).
 
Syntaxe des scripts :
Un commentaire est une ligne qui commence par un dièse :
# Ceci est un commentaire
La structure générale d’une ligne de commande est la suivante :
[préfixe]  [contexte]  commande  [paramètre= [valeur]] .. [paramètre= [valeur]] ;
Le [préfixe] est utilisé pour indiquer si la ligne est soit une action (:) soit une ligne de commande de RouterOS faisant appel à un contexte du routeur (/).
Une ligne de commande se termine par un ; ou un passage à la ligne.

Exemples de lignes de scripts :
# Emettre un son de 1000 Hz pendant 100 ms
: beep  frequency=1000  length=100ms ;

# Ajout de l’adresse 192.168.1.10 dans une liste d’adresses du contexte ip firewall address-list
/ ip firewall address-list add address=192.168.1.10 list=Ordinateurs ;
 
Exemple d’un script très simple (GoogleIP) :
# Début du script
# Retrouver l’IP de Google et l’affecter à la variable locale ResolvedIP
:local ResolvedIP [:resolve "www.google.be"];
# afficher le résultat dans les log
:log info ("IPdeGoogle=".$ResolvedIP)
# Fin du script
 
Explications:
:local ResolvedIP [:resolve "www.google.be"];
La présence des crochets dans la partie [:resolve "www.google.be"] indique qu’il s’agit d’une commande imbriquée dans une autre commande. On affecte à la variable locale le résultat de la commande resolve.
:log info ("IPdeGoogle=".$ResolvedIP)
On indique dans les log le texte "IPdeGoogle=" concaténé (.) avec la valeur de la variable ResolvedIP ($ResolvedIP)

# Vérifier que l'interface ether1 est "running" et stocker le résultat yes/no dans une variable
:local Eth1Run;
:set Eth1Run [/interface get ether1 value-name=running];

Explications :
set Eth1Run (affecter à la variable Eth1Run) [/interface get ether1 value-name=running] (trouver si la variable running de l'interface est sur yes ou no et renvoyer la valeur).

Vous pouvez aussi tester l'état de la connectivité d'une interface ethernet :
:local Ether1Status
/interface ethernet monitor ether1 once do={:set Ether1Status $status};
Cette commande renvoie le status (link-ok/no-link/unknown) de l'interface ether1 dans la variable Ether1Status


Exemple 2 - Connexion distante sans tunnel VPN

Photo
Exemple d'une alternative à l'utilisation d'un tunnel VPN pour l'accès à un service distant. Le script décrit ci-après mets à jour l'adresse IP du client dans une address-list donnant accès a un serveur de l'entreprise. Ce script doit être exécuté régulièrement via une tâche programmée. Attention les échanges ne sont pas cryptés et les mots de passe sont donc transmis en clair.
La règle de Firewall et la programmation de la tâche ne sont pas décrites ici.

# ------------------ HEADER ---------------------
#Update IP in address-lists function of DNS resolution
#
#Script by Philippe Vernin from NSE sprl, Belgium
# philippe.vernin@nseonline.com
#
# Version 1.1 - Tested  -  april2018
#
# ------------------ HEADER ---------------------
 
# ------------------  SCRIPT ---------------------
#Variables
:local AddressListIP
:local DynDNSIP
:local ListName "MyDynIP"
 
#Find Dyn IP and store result in DynDNSIP local variable
:set DynDNSIP [:resolve "client.dyndns-at-home.com"];
 
#Find actual IP in address-lists specified by ListName
:set AddressListIP [/ip firewall address-list get [/ip firewall address-list find list=$ListName] address]
 
#Update IP if different
:if ($DynDNSIP != $AddressListIP) do={
  #Change IP in address-lists;
  /ip firewall address-list set [/ip firewall address-list find list=$ListName] address=$DynDNSIP;
  #Show in log info
  :log info ("DynIP Client changed from ".$AddressListIP." to ".$DynDNSIP);
}
 
# ------------------  SCRIPT ---------------------

A votre service depuis 2001


Horaires

L - V : 9h00 - 18h00

Telephone

0475 999 363

Helpdesk

helpdesk@nseonline.com
  • Accueil
  • Cameras
    • Mobotix
    • Legislation
  • MikroTik
    • Backup&Restore
    • BoutonReset
    • Scripts
  • Contact