Поиск не авторизованных WiFi устройств

Здесь выкладываем скрипты
Ответить
Аватара пользователя
Dragon_Knight
Модератор
Сообщения: 1602
Зарегистрирован: 26 мар 2012, 18:21
Откуда: МО, Мытищи
Контактная информация:

24 мар 2017, 15:53

Написал скрипт для поиска не авторизованных WiFi устройств.
Поиск происходит по следующему алгоритму:
1) Поиск подключённых устройств;
2) Сравнение найденных устройств в списке dhcp lease;
3) В случае, если найдено устройство с dynamic записью dhcp, или устройство, не запросившее IP адрес, то появляется уведомление;
Иными словами, чтобы не было уведомлений, нужно каждое устройство перевести в static запись dhcp.

Баги.
1) При первом запуске происходит двойная проверка и двойное уведомление (Спасибо криворуким разработчикам скриптового языка);
2) Очень редко может произойти так, что устройство подключится к сети, но не успеет запросить IP адрес и система посчитает устройство как не запросившее адрес.

Код для CAPsMAN.
 Читаемый вид

Код: Выделить всё

:if ([:len $MACLIST] = 0) do={ :global MACLIST {""}; };

:foreach i in=[/caps-man registration-table find] do={
   :local USERObj [/caps-man registration-table get $i];
   
   :if (($MACLIST->($USERObj->"mac-address")) != true) do={
      :local DHCPID [/ip dhcp-server lease find mac-address=$USERObj->"mac-address"];
      :local String "";
      
      :if ($DHCPID = "") do={
         :set String ("[Wi-Fi] Unknown device connected: inter: " . $USERObj->"interface" . ", " . $USERObj->"rx-signal" . "dBm, mac: " . $USERObj->"mac-address" . ", host: ip address not issued.");
      };
      
      :if ($DHCPID != "") do={
         :local DHCPObj [/ip dhcp-server lease get $DHCPID];
         
         :if ($DHCPObj->"dynamic" = true) do={
            :set String ("[Wi-Fi] Unknown device connected: inter: " . $USERObj->"interface" . ", " . $USERObj->"rx-signal" . "dBm, mac: " . $USERObj->"mac-address" . ", host: " . $DHCPObj->"host-name" . ", ip: " . $DHCPObj->"active-address" . ".");
         };
      };
      
      :if ($String != "") do={
         :set ($MACLIST->($USERObj->"mac-address")) true;
         :log error $String;
         
      };
   };
};

 Сжатый код создания готового планировщика

Код: Выделить всё

/system scheduler add interval=1m name=WiFiCheck on-event=":if ([:len \$MACLIST] = 0) do={ :global MACLIST {\"\"}; };:foreach i in=[/caps-man registration-table find] do={:local USERObj [/caps-man registration-table get \$i];:if ((\$MACLIST->(\$USERObj->\"mac-address\")) != true) do={:local DHCPID [/ip dhcp-server lease find mac-address=\$USERObj->\"mac-address\"];:local String \"\";:if (\$DHCPID = \"\") do={:set String (\"[Wi-Fi] Unknown device connected: inter: \" . \$USERObj->\"interface\" . \", \" . \$USERObj->\"rx-signal\" . \"dBm, mac: \" . \$USERObj->\"mac-address\" . \", host: ip address not issued.\");};:if (\$DHCPID != \"\") do={:local DHCPObj [/ip dhcp-server lease get \$DHCPID];:if (\$DHCPObj->\"dynamic\" = true) do={:set String (\"[Wi-Fi] Unknown device connected: inter: \" . \$USERObj->\"interface\" . \", \" . \$USERObj->\"rx-signal\" . \"dBm, mac: \" . \$USERObj->\"mac-address\" . \", host: \" . \$DHCPObj->\"host-name\" . \", ip: \" . \$DHCPObj->\"active-address\" . \".\");};};:if (\$String != \"\") do={:set (\$MACLIST->(\$USERObj->\"mac-address\")) true;:log error \$String;};};};"


Код для одиночной точки.
{Скоро}



Помощь в ремонте и настройке оборудования MikroTik, Мытищи, Москва.
Дома: [RouterBOARD CCR1009-8G-1S-1S+] + [RouterBOARD cAP 2n] + [RouterBOARD Groove A-2Hn-32] + [D-Link ANT24-0800];
Работа 1: [RouterBOARD RB493G] + [MikroTik R52H] + [MikroTik CA493] + [D-Link ANT24-0800] + [RouterBOARD SXT G-2HnD];
Работа 2: [RouterBOARD RB2011UiAS-IN];
Резерв: [RouterBOARD RB450G];
denisimmon
Сообщения: 1
Зарегистрирован: 08 апр 2017, 18:16

08 апр 2017, 18:20

И как его использовать непрофессионалу? :nez-nayu:


Аватара пользователя
podarok66
Модератор
Сообщения: 3228
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

08 апр 2017, 21:17

Если честно, то "непрофессионалу" лучше никак не использовать то, что он не понимает. Не стоит прикручивать непонятный вам скрипт "лишь бы было..." Садитесь, почитайте про скриптовый язык RouterOs, там дел на один вечер, если просто по верхушкам пробежаться. А уж потом пройдитесь по телу скрипта и вам станет понятно, нужен ли он вам вообще.
И не стоит делить юзеров на профессионалов и непрофессионалов. То, что обсуждается здесь, способен освоить почти каждый. Нет тут заумных секретов. Может есть что-то непривычное, но тут ведь дело вашего терпения.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Ответить