импорт mac в переменную

Обсуждение ПО и его настройки
Ответить
23q
Сообщения: 57
Зарегистрирован: 16 май 2013, 11:21

подскажите как с ip hotspot users импортировать mac-адреса всех юзеров в одну переменную.


vqd
Модератор
Сообщения: 3605
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

вам тупо список нужен или массив?


Есть интересная задача и бюджет? http://mikrotik.site
23q
Сообщения: 57
Зарегистрирован: 16 май 2013, 11:21

просто список через замятую типа global mac [ip hotspot user get value-name=mac-address] для всех. я так понял через :foreach


vqd
Модератор
Сообщения: 3605
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

ну да, через foreach


Есть интересная задача и бюджет? http://mikrotik.site
23q
Сообщения: 57
Зарегистрирован: 16 май 2013, 11:21

може подскажешь как его до кучи слепить? ;;-))) ;;-)))


vqd
Модератор
Сообщения: 3605
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

как то так

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

:foreach i in [/ip hotspot user find] do={:put [/ip hotspot user get $i mac-address ]} 


Есть интересная задача и бюджет? http://mikrotik.site
23q
Сообщения: 57
Зарегистрирован: 16 май 2013, 11:21

vqd писал(а):как то так

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

:foreach i in [/ip hotspot user find] do={:put [/ip hotspot user get $i mac-address ]} 

спасибо, сделал так, но записывает только последний мак, я так понял он перезаписывает переменную, а мне нужно ее дополнить:

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

global 2
:foreach i in=[/ip hotspot user find] do={:set 2  [/ip hotspot user get $i mac-address ]}


vqd
Модератор
Сообщения: 3605
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

Ну логично )))

:set tmp ($tmp . ", " . "123"))

В ТМП будут добавляться 123 через запятую


Есть интересная задача и бюджет? http://mikrotik.site
Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Прикольно выходит. Я тут накропал на основе вашей беседы скриптик, который одним махом формирует списочек подключенных МАС-адресов из Leases:

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

{
    :local t;
    :foreach i in=[/ip dhcp-server lease find] do={ 
        :if ([/ip dhcp-server lease get $i status]="bound") do={
        :set t ($t . "\r\n" . [/ip dhcp-server lease get $i status] . "-" . [/ip dhcp-server lease get $i mac-address])
        }
    }
     :put $t
 }

Очень даже интересное начинание. Оставлю здесь для возможных идей со стороны сообщества. Подкидывайте, кому что придет в голову.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
23q
Сообщения: 57
Зарегистрирован: 16 май 2013, 11:21

начинание отличное, а вот продолжение :-) :-) :

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

:local time [/system clock get time];
:local date;
:local day;
:local month;
:local year;
:local yeardiv;
:local yearmult;
:local leapyear;
:local lastday;
:local found;
:global counter;
:set date [system clock get date];
:set month [:pick $date 0 3];
:set day [:pick $date 4 6];
:set year [:pick $date 7 11];
:local hotusers "The time is - $date $time hotspot users: $counter";
:local macHotspot;
:foreach i in=[/ip hotspot user find] do={ :set macHotspot ($macHotspot . "\r\n" . [/ip hotspot user get $i mac-address])};
:local ContentsFile [/file get hotusers.txt contents];
/file set [/file find name=hotusers.txt] contents="$ContentsFile \r\n $hotusers $macHotspot \r\n";
:set counter 0;
:set yeardiv ($year / 4);
:set yearmult ($yeardiv * 4);
 :if ([$yearmult] = $year) do={ :set leapyear true } else={ :set leapyear false }
 :if ([$month] = "jan") do={ :set lastday 31 }
 :if ([$month] = "feb") do={
        :if ($leapyear = true) do={ :set lastday 29 }
        :if ($leapyear = false) do={ :set lastday 28 } }
 :if ([$month] = "mar") do={ :set lastday 31 }
 :if ([$month] = "apr") do={ :set lastday 30 }
 :if ([$month] = "may") do={ :set lastday 31 }
 :if ([$month] = "jun") do={ :set lastday 30 }
 :if ([$month] = "jul") do={ :set lastday 31 }
 :if ([$month] = "aug") do={ :set lastday 31 }
 :if ([$month] = "sep") do={ :set lastday 30 }
 :if ([$month] = "oct") do={ :set lastday 31 }
 :if ([$month] = "nov") do={ :set lastday 30 }
 :if ([$month] = "dec") do={ :set lastday 31 }
 :if ([$lastday] = $day) do={
:local body "$date $time hotspot report";
:local smtpserv [:resolve "smtp.yandex.ru"];
:local email "user@yandex.ru";
:local pass 123456;
/tool e-mail send server=$smtpserv port=587 user=$email password=$pass start-tls=yes to="user1@i.com" cc="user2@qwe.qwe.com" from=$email subject="Mikrotik hotspot report" body="$body" file="hotusers.txt";
delay 6;
/file remove hotusers.txt;
/file print file=hotusers.txt;
delay 6;
/file set hotusers.txt contents=""}

Скрипт считает количество подключенных клиентов к хотспот за один день. Дозаписывает их в файл вместе с маками устройств(за каждый день). Каждый последний день месяца отправляет отчет(в виде тхт файла) на мыло двум адресатам.
Скрипт запускает в 20.00, когда хотспот уже неактивен(с 8 до 20). в хотспот "триал уптайм резет" настроен так(13 часов), что скрипт успевает сработать до того как юзеры с хотспот за день пропадут. На следующий день посторяется подсчет юзеров за день работы и запись этого в файл будущего отчета. До того как первый раз запустить скрипт файл hotusers.txt должен быть создан в корне микротик(пустой).
Вид отчета:
The time is - apr/01/2015 20:01:00 hotspot users: 10

ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ


The time is - apr/02/2015 20:01:00 hotspot users: 7

ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ
ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ:ЧЧ


Трабла може быть с ограничением в запись переменной ContentsFile в 4кб (если много клиентов), тогда файл нужно дополнять

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

ip dhcp-server lease print terse file="1.txt" append


ну и в хотспот в в "on login":

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

:global counter; 
 :set counter ($counter + 1);
 :log info "number of logged users: $counter";


Ответить