mirror of
https://github.com/eworm-de/routeros-scripts
synced 2024-05-14 08:04:19 +00:00
12d34e4a7c
This was true, but the mac address is no longer unknown after it was added to address list in comment.
81 lines
3.6 KiB
Text
81 lines
3.6 KiB
Text
#!rsc by RouterOS
|
|
# RouterOS script: collect-wireless-mac.capsman
|
|
# Copyright (c) 2013-2021 Christian Hesse <mail@eworm.de>
|
|
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
|
|
#
|
|
# collect wireless mac adresses in access list
|
|
# https://git.eworm.de/cgit/routeros-scripts/about/doc/collect-wireless-mac.md
|
|
#
|
|
# provides: lease-script, assign, order=40
|
|
#
|
|
# !! Do not edit this file, it is generated from template!
|
|
|
|
:local 0 "collect-wireless-mac.capsman";
|
|
:global GlobalFunctionsReady;
|
|
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
|
|
|
|
:global Identity;
|
|
|
|
:global EitherOr;
|
|
:global GetMacVendor;
|
|
:global LogPrintExit2;
|
|
:global ScriptLock;
|
|
:global SendNotification2;
|
|
:global SymbolForNotification;
|
|
|
|
$ScriptLock $0 false 10;
|
|
|
|
:if ([ :len [ / caps-man access-list find where comment="--- collected above ---" disabled ] ] = 0) do={
|
|
/ caps-man access-list add comment="--- collected above ---" disabled=yes;
|
|
$LogPrintExit2 warning $0 ("Added disabled access-list entry with comment '--- collected above ---'.") false;
|
|
}
|
|
:local PlaceBefore ([ / caps-man access-list find where comment="--- collected above ---" disabled ]->0);
|
|
|
|
:foreach Reg in=[ / caps-man registration-table find ] do={
|
|
:local RegVal;
|
|
:do {
|
|
:set RegVal [ / caps-man registration-table get $Reg ];
|
|
} on-error={
|
|
$LogPrintExit2 debug $0 ("Device already gone... Ignoring.") false;
|
|
}
|
|
|
|
:local AccessList ([ / caps-man access-list find where mac-address=($RegVal->"mac-address") ]->0);
|
|
:if ([ :len $AccessList ] > 0) do={
|
|
$LogPrintExit2 debug $0 ("MAC address " . $RegVal->"mac-address" . " already known: " . \
|
|
[ / caps-man access-list get $AccessList comment ]) false;
|
|
}
|
|
|
|
:if ([ :typeof $RegVal ] = "array" && [ :len $AccessList ] = 0) do={
|
|
:local Address "no dhcp lease";
|
|
:local DnsName "no dhcp lease";
|
|
:local HostName "no dhcp lease";
|
|
:local Lease ([ / ip dhcp-server lease find where mac-address=($RegVal->"mac-address") dynamic=yes status=bound ]->0);
|
|
:if ([ :len $Lease ] > 0) do={
|
|
:set Address [ / ip dhcp-server lease get $Lease address ];
|
|
:set HostName [ $EitherOr [ / ip dhcp-server lease get $Lease host-name ] "no hostname" ];
|
|
:set DnsName "no dns name";
|
|
:local DnsRec ([ / ip dns static find where address=$Address ]->0);
|
|
:if ([ :len $DnsRec ] > 0) do={
|
|
:set DnsName [ / ip dns static get $DnsRec name ];
|
|
}
|
|
}
|
|
:local DateTime ([ / system clock get date ] . " " . [ / system clock get time ]);
|
|
:local Vendor [ $GetMacVendor ($RegVal->"mac-address") ];
|
|
:local Message ("MAC address " . $RegVal->"mac-address" . " (" . $Vendor . ", " . $HostName . ") " . \
|
|
"first seen on " . $DateTime . " connected to SSID " . $RegVal->"ssid" . ", interface " . $RegVal->"interface");
|
|
$LogPrintExit2 info $0 $Message false;
|
|
/ caps-man access-list add place-before=$PlaceBefore comment=$Message mac-address=($RegVal->"mac-address") disabled=yes;
|
|
$SendNotification2 ({ origin=$0; \
|
|
subject=([ $SymbolForNotification "mobile-phone" ] . $RegVal->"mac-address" . " connected to " . $RegVal->"ssid"); \
|
|
message=("A device with unknown MAC address connected to " . $RegVal->"ssid" . " on " . $Identity . ".\n\n" . \
|
|
"Controller: " . $Identity . "\n" . \
|
|
"Interface: " . $RegVal->"interface" . "\n" . \
|
|
"SSID: " . $RegVal->"ssid" . "\n" . \
|
|
"MAC: " . $RegVal->"mac-address" . "\n" . \
|
|
"Vendor: " . $Vendor . "\n" . \
|
|
"Hostname: " . $HostName . "\n" . \
|
|
"Address: " . $Address . "\n" . \
|
|
"DNS name: " . $DnsName . "\n" . \
|
|
"Date: " . $DateTime) });
|
|
}
|
|
}
|