Страница 1 из 1

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

Добавлено: 24 мар 2017, 15:53
Dragon_Knight
Написал скрипт для поиска не авторизованных 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;};};};"


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

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

Добавлено: 08 апр 2017, 18:20
denisimmon
И как его использовать непрофессионалу? :nez-nayu:

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

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