Remote activation von Mikrotik-Skripten über Telegram v 2.0

Herzlichen Glückwunsch nach dem Feiertag. Dieses Thema stellt eine verbesserte Version dar; es handelt sich um das, was ich 2016 hier geschrieben habe..

Im Grunde hat sich das Prinzip nicht verändert, mit dem einzigen Unterschied, dass es jetzt sofort ohne Verzögerung funktioniert.

Laden Sie das Skript in Mikrotik hoch, ändern Sie BotID und ChatID in Ihre eigenen und erstellen Sie einen Zeitplan dafür. Setzen Sie den Parameter «Startzeit» auf Startup (Skriptstart beim Booten).
«Intervall»: 00:00:00
Im Übrigen bleibt alles wie gehabt.

Telegram-v2

:delay 10
:global mtIdentity [/system identity get name];
:global botID "botXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXX" ;
:global myChatID "YYYYYY" ;
:local chatId 0;
:local messageId 0;


:local parse do={
  :local startLoc ([:find $content $variable -1] + [:len $variable] + 2);
  :local commaLoc ([:find $content "," $startLoc] - 1 + 1);
  :local braceLoc ([:find $content "}" $startLoc] - 1 + 1);
  :local endLoc $commaLoc;
  :local startSymbol [:pick $content $startLoc]
  :if ($braceLoc != 0 and ($commaLoc = 0 or $braceLoc < $commaLoc)) do={
    :set endLoc $braceLoc;
  };
  :if ($startSymbol = "{") do={
    :set endLoc ($braceLoc + 1);
  };
  :if ($quotas = true) do={
    :set startLoc ($startLoc + 1);
    :set endLoc ($endLoc - 1);
  }
  :if ($endLoc  30) do={
      :set messageId ([$parse content=$content variable="update_id"] + 1)
      :local message [$parse content=$content variable="text" quotas=true]
      :local chat [$parse content=$content variable="chat"]
      :local chatId [$parse content=$chat variable="id"]      
      
      :if (($chatId = $myChatID) and ([/system script find name=$message] != "")) do={
        :system script run $message;
      } else={
        :tool fetch url=("https://api.telegram.org/$botID/sendmessage?chat_id=$chatId&text=$mtIdentity: Unbekannter Befehl: $message") keep-result=no
      }
    }
  } on-error={}
};

Nach ein paar Jahren Nutzung wurde ein Bug festgestellt: Aus unerklärlichen Gründen stoppen schwächere Mikrotik-Router das Skript, während es auf leistungsstärkeren Modellen ohne Unterbrechung läuft.

Für diese Zwecke habe ich einen Workaround namens WatchDog erstellt. Hier ändern wir den Namen des Skripts auf den oben angegebenen. Der Neustart-Intervall wird auf 5 Minuten gesetzt. Alle 5 Minuten wird unser "Wachhund" das Skript überprüfen, und falls es nicht läuft, wird es neu gestartet.

WatchDogT.me

:global scriptname "t.me"
:if ([:len [/system script job find script=$"scriptname"]] > 0) do={
:log info "$scriptname bereits aktiv - beende das alte Skript vor dem Fortfahren"
:foreach counter in=[/system script job find script=$"scriptname"] do={
/system script job remove $counter
}
}
/system script run $scriptname

Und zum Schluss, das Skript stammt aus dem Mikrotik-Forum.
Es sendet wichtige Themen aus den Logs an unser Telegram.

Wir fügen das Skript dem Zeitplan hinzu und geben den Neustart-Intervall alle 5 Minuten an, ändern BotID und ChatID auf unsere eigenen.

Notify-log

:global lastTime
:global output
:global mtIdentity [/system identity get name];
:global botID "botXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXX" ;
:global myChatID "YYYYYY" ;

:local LogGet [ :toarray [ /log find topics~"critical" || message~"login failure" || message~"[Ff]ailure" ] ] ;
:local LogtLineCount [ :len $LogGet ] ;
if ($LogtLineCount > 0) do={
   :local currentTime "$[ /log get [ :pick $LogGet ($LogtLineCount -1) ] time ]";
   :if ([:len $currentTime] = 10 ) do={
      :set currentTime [ :pick $currentTime 0 10 ];
   }
   :set output "$currentTime - $[/log get [ :pick $LogGet ($LogtLineCount-1) ] message ]";
   :if (([:len $lastTime]  0) && ($lastTime != $currentTime))) do={
      :set lastTime $currentTime ;
         :tool fetch url=("https://api.telegram.org/$botID/sendmessage?chat_id=$myChatID&text="$mtIdentity" :  $output") keep-result=no
   }
}

Wir erhalten das Ergebnis:

Remote activation von Mikrotik-Skripten über Telegram v 2.0

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster