Прошу Помощи

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Ответить
ZeaZee
Сообщения: 10
Зарегистрирован: 01 ноя 2019, 13:22
Откуда: Новосибирск

Доброго времени суток.
Прошу помощи в написании такого скрипта:
В помещении находится приблизительно 600+ устройств, абонентских, им нужно подключиться к Access Point на базе микротика 493 кажется, сейчас не на работе просто, впитать настройку с сервера и отключиться, освободив место для следующих. На точке стоит ограничение в 60 абонентов. Больше серв за раз не обработает все равно, так что смысл нет расширять, проверено.
По сему хочу написать скрипт, который извлекал бы mac-adress ИЗ регистр листа и помещал бы его в fire-wall правило. Может кто-нибудь помочь, хотя с обозначением переменной, которая бы извлекала мак устройства из листа, дальше я бы справился. Благодарю.
Может есть другой выход без скрипта. И да 600+ это еще лайтовенько, есть помещения где более 4000, но до них я надеюсь будет использоваться хотя бы 10.
Ах да, еще эти устройства работают ТОЛЬКО на определенной частоте, разнос по частотам не вариант.
Очень благодарен буду за помощь и выложу готовый скрипт, отшлифованный так сказать, так как есть тестовый стенд.


Ca6ko
Сообщения: 1484
Зарегистрирован: 23 ноя 2018, 11:08
Откуда: Харкiв

60 устройств на точку это многовато. При зарегистрированных 100 клиентов 70 процентов времени в эфире вещают их маяки. Поэтому скорости очень низкие.
Не рекомендуют подключать больше 30 работающих.
Вариант добавить несколько точек и под Capsman. Точки разнести в пространстве и понизить мощность до нужных значений. Устройства ведь по помещению разнесены?

Команды можете посмотреть в этой теме viewtopic.php?f=14&t=8516


1-е Правило WiFi - Везде где только можно откажитесь от WiFi!
2-е Правило WiFi -Устройство, которое пользователь не носит с собой постоянно, должно подключаться кабелем!!

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

Ну сам скрипт писать мне явно не очень хочется, а вот приём получения адреса из списка ... Предположим, что у вас есть список из 600 МАС-адресов в текстовом формате. Обязательным условием является сам список - каждый МАС с новой строки, никаких других знаков не приемлем. Дальше определяем количество устройств, которое будет в одном такте, например 15. И погнали

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

# Берём содержимое файла
 :local con [/file get [find name=1.txt] contents]; 
 # Определяем такт работы 
 :for r from=0 to=599 step=15 do={ 
 # Осуществляем выборку МАС-адресов
 :for n from=(0+$r) to=(14+$r) do={
 :put [:pick $con (19 * $n) ([:find $con "\r\n"] + (19 * $n))];
 }}
Вместо :put можно начинать работать с получаемыми значениями. Как-то так...
Но работать он будет ой долго...
А-а-а-а, перечитал стартовый пост. Так вы из аксцесс-листа хотите извлечь МАС-адреса? Принцип тот же. Вам нужны всего несколько активных адресов. Делаем весь лист disabled=yes и запускаем скрипт

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

 :for r from=0 to=599 step=15 do={ 
        :for n from=(0+$r) to=(14+$r) do={
               /interface wireless access-list set disabled=no numbers=$n 
               };
         :delay 5;
          /interface wireless access-list set [find disabled=no] disabled=yes;
 :delay 5; 
 }
Но надо прикручивать проверку на неполный такт, а то он завершается на первой половине цикла .... Из-за этого на последнем цикле скрипт вылетает и последние МАСи остаются включенными. Я не придумал, как обойти эту ерунду. Может кто-то и подскажет, тогда можно будет слепить полноценное решение.
А так, меняйте паузы между тактами, прикручивайте выполнение любых задач, всё должно отработать.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
ZeaZee
Сообщения: 10
Зарегистрирован: 01 ноя 2019, 13:22
Откуда: Новосибирск

podarok66 писал(а): 03 ноя 2019, 08:45 Ну сам скрипт писать мне явно не очень хочется, а вот приём получения адреса из списка ... Предположим, что у вас есть список из 600 МАС-адресов в текстовом формате. Обязательным условием является сам список - каждый МАС с новой строки, никаких других знаков не приемлем. Дальше определяем количество устройств, которое будет в одном такте, например 15. И погнали

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

# Берём содержимое файла
 :local con [/file get [find name=1.txt] contents]; 
 # Определяем такт работы 
 :for r from=0 to=599 step=15 do={ 
 # Осуществляем выборку МАС-адресов
 :for n from=(0+$r) to=(14+$r) do={
 :put [:pick $con (19 * $n) ([:find $con "\r\n"] + (19 * $n))];
 }}
Вместо :put можно начинать работать с получаемыми значениями. Как-то так...
Но работать он будет ой долго...
А-а-а-а, перечитал стартовый пост. Так вы из аксцесс-листа хотите извлечь МАС-адреса? Принцип тот же. Вам нужны всего несколько активных адресов. Делаем весь лист disabled=yes и запускаем скрипт

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

 :for r from=0 to=599 step=15 do={ 
        :for n from=(0+$r) to=(14+$r) do={
               /interface wireless access-list set disabled=no numbers=$n 
               };
         :delay 5;
          /interface wireless access-list set [find disabled=no] disabled=yes;
 :delay 5; 
 }
Но надо прикручивать проверку на неполный такт, а то он завершается на первой половине цикла .... Из-за этого на последнем цикле скрипт вылетает и последние МАСи остаются включенными. Я не придумал, как обойти эту ерунду. Может кто-то и подскажет, тогда можно будет слепить полноценное решение.
А так, меняйте паузы между тактами, прикручивайте выполнение любых задач, всё должно отработать.
Благодарю, но вы меня немного не поняли, у меня нет списка мак адресов, будь он у меня, все было бы проще. Его нужно извлечь из arp-таблицы подключенных устройств.
ВАЖНО не из аксес листа, а из регистрэйшен листа WI-FI. То есть устройства мне заранее не известные.


ZeaZee
Сообщения: 10
Зарегистрирован: 01 ноя 2019, 13:22
Откуда: Новосибирск

Ca6ko писал(а): 01 ноя 2019, 19:24 60 устройств на точку это многовато. При зарегистрированных 100 клиентов 70 процентов времени в эфире вещают их маяки. Поэтому скорости очень низкие.
Не рекомендуют подключать больше 30 работающих.
Вариант добавить несколько точек и под Capsman. Точки разнести в пространстве и понизить мощность до нужных значений. Устройства ведь по помещению разнесены?

Команды можете посмотреть в этой теме viewtopic.php?f=14&t=8516
Cпасибо это интересно


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

ZeaZee писал(а): 03 ноя 2019, 15:20 Благодарю, но вы меня немного не поняли, у меня нет списка мак адресов, будь он у меня, все было бы проще. Его нужно извлечь из arp-таблицы подключенных устройств.
ВАЖНО не из аксес листа, а из регистрэйшен листа WI-FI. То есть устройства мне заранее не известные.
Да какая разница, откуда извлекать-то? Вот отдайте команду в терминале и посмотрите, что у вас выйдет...

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

:for y from=0 to=30 do={:put [/ip arp get number=$y mac-address ]}
Или так, тогда без ошибки выйдет в конце

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

:foreach in=[/ip arp find disabled=no] e do={:put [/ip arp get $e mac-address]}
Ну и порежьте результат, как вам надо. Мы же не в бюро заказов, направление есть, дальше самостоятельно. :ti_pa:


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
ZeaZee
Сообщения: 10
Зарегистрирован: 01 ноя 2019, 13:22
Откуда: Новосибирск

podarok66 писал(а): 03 ноя 2019, 17:27
ZeaZee писал(а): 03 ноя 2019, 15:20 Благодарю, но вы меня немного не поняли, у меня нет списка мак адресов, будь он у меня, все было бы проще. Его нужно извлечь из arp-таблицы подключенных устройств.
ВАЖНО не из аксес листа, а из регистрэйшен листа WI-FI. То есть устройства мне заранее не известные.
Да какая разница, откуда извлекать-то? Вот отдайте команду в терминале и посмотрите, что у вас выйдет...

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

:for y from=0 to=30 do={:put [/ip arp get number=$y mac-address ]}
Или так, тогда без ошибки выйдет в конце

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

:foreach in=[/ip arp find disabled=no] e do={:put [/ip arp get $e mac-address]}
Ну и порежьте результат, как вам надо. Мы же не в бюро заказов, направление есть, дальше самостоятельно. :ti_pa:
Прошу прощения, но там и тона притензии не было, я начал отвечать не дочитав до конца, вы мне очень помогли, думаю справлюсь дальше, как доделаю скину скрипт с пояснениями.
Спасибо огромное, извините за недопонимание.


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

Да я вроде как и не обижался :sh_ok: У меня выходной, на улице ужас, родные кто в театре, кто в сети, вот я и занимаюсь не пойми чем. Но я пока не понял, как вы там совладаете с такими огромными таблицами. Вы скажите, сколько по времени занимает полная операция с одним устройством?
Кстати, с registration table я не могу проверить, у меня всё в доме через CAPsMAN управляется. :-) Если надо из него извлечь, то тут легко.
Вот кстати пришла в голову идея, часть устройств отключать от сети на время, пока меня нет дома. А определять, дома ли я, можно именно по этой таблице :nez-nayu: (wifi в телефоне включен всегда)


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Аватара пользователя
podarok66
Модератор
Сообщения: 4358
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Моё любопытство мне не давало спать :smu:sche_nie: Я всё же хотел понять логику всего этого дела. Чтобы и выбирало МАС-адреса, и формировало пулы по заданному количеству адресов, и завершало скрипт нормально. Что в действительности будет делать скрипт, мне параллельно, а вот сама логика мне весь отдых испортила. ТС, мои поздравления, давно мне не было так интересно :bra_vo:
Итак, попробую пояснить ход работы скрипта:

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

# Создаём переменную в виде массива, по моему мнению, очень подходяще для данного случая
global t [:toarray []];
# Наполняем массив. Тут важно понять, что неважно, откуда мы его наполним, главное понять сам принцип наполнения.
# Если действительно упёрлись в таблицу регистрации, то там строка будет типа /interface wireless registration-table find interface=bridge
# и вторая /interface wireless registration-table get $i mac-address . Мне просто не на чем было протестировать скрипт именно в этом месте
# поэтому брал оттуда,  где у меня есть "жертвы" моих экспериментов
 :foreach i in=[/ip arp find interface=bridge] do={
     :local y [/ip arp get $i mac-address];
	 set t ($t, $y);
	 }
 # Это отладочная команда, чтобы видеть, что информация у меня загружена в массив
 #:put $t;
 # Куча переменных. Начало отсчёта, у Микротиков начинается с нуля
 :local nt 0;
 # Количество элементов в массиве
 :local ln [:len $t];
 # Количество МАС-адресов в одном такте
 :local stp 15;
 # Номер последнего элемента массива
 :local ky ($ln - 1);
 # Количество тактов, в которых количество элементов будет $stp
 :local ks ($ln / $stp);
 # Количество элементов, обрабатываемых за $ks тактов
 :local lnnew ($ks * $stp);
 # Номер последнего элемента в $lnnew
 :local ost ($lnnew - 1);
 # начинаем обрабатывать, делим массив на такты и в каждом такте обрабатываем
 :for nb from=$nt to=$ost step=$stp do={
      :for gb from=$nt to=($stp - 1) do={
      # Это именно то место, где должны быть команды, которые выполняются в отношении элементов массива,
      # которые собраны в одном такте, например включить для них доступ.
      :put ($t->$gb);
	  
	  };
	  # Здесь команда для всего актуального такта, например :delay 100;
	  :put "Next";
	  # Если затем требуется ещё какие-то команды для каждого элемента, создаём аналогичный блок
	  # :for gb from=$nt to=($stp - 1) do={
	  # :put ($t->$gb);
	  # };
	  }
 # Осталось обработать остатки массива. Принципы прописывания команд те же самые, включая сказанное о дополнительном блоке
 :for nbost from=$lnnew to=$ky do={
      :put ($t->nbost);
	  
	  }
 :put "It's stop";


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