mirror of
https://github.com/eworm-de/routeros-scripts.git
synced 2024-05-11 05:55:19 +00:00
12d34e4a7c
This was true, but the mac address is no longer unknown after it was added to address list in comment.
83 lines
3.8 KiB
Plaintext
83 lines
3.8 KiB
Plaintext
#!rsc by RouterOS
|
|
# RouterOS script: collect-wireless-mac.local
|
|
# 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.local";
|
|
: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 [ / interface wireless access-list find where comment="--- collected above ---" disabled ] ] = 0) do={
|
|
/ interface wireless access-list add comment="--- collected above ---" disabled=yes;
|
|
$LogPrintExit2 warning $0 ("Added disabled access-list entry with comment '--- collected above ---'.") false;
|
|
}
|
|
:local PlaceBefore ([ / interface wireless access-list find where comment="--- collected above ---" disabled ]->0);
|
|
|
|
:foreach Reg in=[ / interface wireless registration-table find ] do={
|
|
:local RegVal;
|
|
:do {
|
|
:set RegVal [ / interface wireless registration-table get $Reg ];
|
|
} on-error={
|
|
$LogPrintExit2 debug $0 ("Device already gone... Ignoring.") false;
|
|
}
|
|
|
|
:local AccessList ([ / interface wireless 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: " . \
|
|
[ / interface wireless 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 ];
|
|
}
|
|
}
|
|
:set ($RegVal->"ssid") [ / interface wireless get [ find where name=($RegVal->"interface") ] ssid ];
|
|
: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;
|
|
/ interface wireless 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) });
|
|
}
|
|
}
|