Скрипт вывода списка подключенных к роутеру устройств

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

aladdin писал(а): 27 фев 2021, 00:15 Создал скрипт в System/Script через + вставил содержимое скрипа, сохранил и запустил. Как увидеть полученный результат
Добрый день.

Код нужно скопировать в буфер и просто вставить в терминал Mikrotik'а - там и увидите результат.


Аватара пользователя
drpioneer
Сообщения: 175
Зарегистрирован: 30 май 2013, 10:20

Приветствую.
sergs писал(а): 28 сен 2020, 09:08 Идея скрипта классная, жаль что у меня не работает, вот вывод:

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

NUMBER INTERFACE             HOST NAME                 MAC ADDRESS         IP ADDRESS           NETWORK           COMMENT                            
                                                                                                                                                     
1      ether1                CRS354-48G-4S+2Q+         C4:AD:34:B7:93:CB   192.168.0.251/24     bridge1           
2      ether2                CRS354-48G-4S+2Q+         C4:AD:34:B7:93:CC   192.168.0.251/24     bridge1                                    
3      ether3                CRS354-48G-4S+2Q+         C4:AD:34:B7:93:CD   192.168.0.251/24     bridge1                                    
4      ether5                CRS354-48G-4S+2Q+         C4:AD:34:B7:93:CF   192.168.0.251/24     bridge1                                    
5      ether7                CRS354-48G-4S+2Q+         C4:AD:34:B7:93:D1   192.168.0.251/24     bridge1                                    
...                           
38     bridge1               CRS354-48G-4S+2Q+         C4:AD:34:B7:93:CB   192.168.0.251/24     192.168.0.0     
Дело в том, что этот CRS работает как switch и не является шлюзом по умолчанию иip/arp пустой !

в данном случае лучше список MAC адресов и на каких они интерфейсах получать в bridge/hosts
затем командой tool ip-scan получить соответствие MACу IP и DNS имя!
остается сопоставить интерфейсы по мак адресам с остальной информацией и свести все в одну таблицу.
Попытался прикрутить вашу задумку к уже существующему скрипту...
Для этого в начале выполняется команда tool ip-scan , тем самым наполняется список ip/arp, после чего выполняется остальная часть скрипта.

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



# Script for building a network table by drPioneer
# https://forummikrotik.ru/viewtopic.php?p=70575
# tested on ROS 6.48
# updated 2021/03/29

:do {
    # tools ip scan list
    /tool ip-scan duration=30s;
    
    # interface list
    :local interfaceIndexArray 0;
    :local interfaceArray {"";"";"";""};
    :foreach interfaceIndex in=[ /interface find running=yes; ] do={
        :local interfaceName         ([ /interface get $interfaceIndex name; ]);
        :local interfaceHost         ([ /system identity get name; ]);
        :local interfaceMAC          ([ /interface get $interfaceIndex mac-address; ]);
        :local interfaceComment      ([ /interface get $interfaceIndex comment; ]);
        :set ($interfaceArray->$interfaceIndexArray) {$interfaceName;$interfaceHost;$interfaceMAC;$interfaceComment};
        :set interfaceIndexArray ($interfaceIndexArray + 1);
    }
    :set interfaceIndexArray ($interfaceIndexArray - 1);

    # interface bridge host list
    :local bridgeHostIndexArray 0;
    :local bridgeHostArray {"";"";"";"";"";""};
    :foreach bridgeHost in=[ /interface bridge host find; ] do={
        :do {
            :local hostInterface     ([ /interface bridge host get $bridgeHost on-interface; ]);
            :local hostMAC           ([ /interface bridge host get $bridgeHost mac-address; ]);
            :local hostBridge        ([ /interface bridge host get $bridgeHost bridge; ]);
            :local hostComment       ("");
            :local hostName          ("");
            :local hostIP            ("");
            if ([ /interface bridge host get $bridgeHost local; ] = true) do={ 
                :set hostName        ([ /system identity get name; ]);
                :set hostIP          ([ /ip address get [ find interface=$hostBridge ] address; ]);
            } else={
                :do {
                    :set hostName    ([ /ip dhcp-server lease get [ find mac-address=$hostMAC ] host-name; ]);
                    :set hostIP      ([ /ip dhcp-server lease get [ find mac-address=$hostMAC ] address; ]);
                    :set hostComment ([ /ip dhcp-server lease get [ find mac-address=$hostMAC ] comment; ]);
                } on-error={ 
                    :set hostName    ([ /ip dhcp-server lease get [ find mac-address=$hostMAC dynamic=yes ] host-name; ]);
                    :set hostIP      ([ /ip dhcp-server lease get [ find mac-address=$hostMAC dynamic=yes ] address; ]);
                }
            }
            :set ($bridgeHostArray->$bridgeHostIndexArray) {$hostInterface;$hostName;$hostMAC;$hostIP;$hostBridge;$hostComment};
            :set bridgeHostIndexArray ($bridgeHostIndexArray + 1);
        } on-error={ }
    }
    :set bridgeHostIndexArray ($bridgeHostIndexArray - 1);

    # ip address list
    :local ipAddressIndexArray 0;
    :local ipAddressArray {"";"";"";""};
    :foreach ipAddress in=([ /ip address find; ]) do={
        :local ipAddressInterface    ([ /ip address get $ipAddress interface; ]); 
        :local ipAddressIP           ([ /ip address get $ipAddress address; ]); 
        :local ipAddressNetwork      ([ /ip address get $ipAddress network; ]);
        :local ipAddressComment      ([ /ip address get $ipAddress comment; ]);
        :set ($ipAddressArray->$ipAddressIndexArray) {$ipAddressInterface;$ipAddressIP;$ipAddressNetwork;$ipAddressComment};
        :set ipAddressIndexArray ($ipAddressIndexArray + 1);
    }
    :set ipAddressIndexArray ($ipAddressIndexArray - 1);

    # ip arp list
    :local ipArpIndexArray 0;
    :local ipArpArray {"";"";"";"";""}; 
    :foreach ipArp in=([ /ip arp find; ]) do={
        :local ipArpInterface        ([ /ip arp get $ipArp interface; ]); 
        :local ipArpMACAddress       ([ /ip arp get $ipArp mac-address; ]);
        :local ipArpIP               ([ /ip arp get $ipArp address; ]); 
        :local ipArpComment          ([ /ip arp get $ipArp comment; ]);
        :local ipArpNetwork          ("");
        :do { 
            :set ipArpNetwork        ([ /ip dhcp-client get [find interface=$ipArpInterface ] gateway ]); 
        } on-error={ }
        if ($ipArpNetwork = $ipArpIP) do={ :set ipArpNetwork ("GATEWAY"); }
        :local equalMACAddress (false);
        :for i from=0 to=$bridgeHostIndexArray do={
            :local findDestination [:find key=($ipArpMACAddress) in=($bridgeHostArray->$i)];
            if ([:tostr [$findDestination]] != "") do={ :set equalMACAddress (true); }
        }
        if ($equalMACAddress = false) do={
            :do {
                if ([ /interface bridge host get [ find mac-address=$ipArpMACAddress ] on-interface; ] != "") do={
                    :set ipArpNetwork ($ipArpInterface);
                    :set ipArpInterface ([ /interface bridge host get [ find mac-address=$ipArpMACAddress ] on-interface; ]);
                }
            } on-error={ }
            :set ($ipArpArray->$ipArpIndexArray) {$ipArpInterface;$ipArpMACAddress;$ipArpIP;$ipArpComment;$ipArpNetwork};
            :set ipArpIndexArray ($ipArpIndexArray + 1);
        }
    }
    :set ipArpIndexArray ($ipArpIndexArray - 1);

    # build new list
    :local newIndexArray 2;
    :local newArray {"";"";"";"";"";"";""};
    :set ($newArray->0) {"NUMBER";"INTERFACE";"HOST NAME";"MAC ADDRESS";"IP ADDRESS";"NETWORK";"COMMENT"};
    :set ($newArray->1) {"";"";"";"";"";"";""};
    :for i from=0 to=$interfaceIndexArray do={
        :for j from=0 to=$bridgeHostIndexArray do={
            :local findDestination [:find key=($bridgeHostArray->$j->0) in=($interfaceArray->$i)];
            if ([:tostr [$findDestination]] != "" && ($bridgeHostArray->$j->4) != ($bridgeHostArray->$j->0)) do={
                if (($bridgeHostArray->$j->2) = ($interfaceArray->$i->2)) do={
                    :set ($newArray->$newIndexArray) {$newIndexArray-1;($bridgeHostArray->$j->0);($bridgeHostArray->$j->1);($bridgeHostArray->$j->2);($bridgeHostArray->$j->3);($bridgeHostArray->$j->4);($interfaceArray->$i->3)}; 
                } else={
                    :set ($newArray->$newIndexArray) {$newIndexArray-1;($bridgeHostArray->$j->0);($bridgeHostArray->$j->1);($bridgeHostArray->$j->2);($bridgeHostArray->$j->3);($bridgeHostArray->$j->4);($bridgeHostArray->$j->5)}; 
                }
                :set newIndexArray ($newIndexArray + 1);
            }
        }
        :for j from=0 to=$ipArpIndexArray do={
            :local findDestination [:find key=($ipArpArray->$j->0) in=($interfaceArray->$i)];
            if ([:tostr [$findDestination]] != "") do={
                :set ($newArray->$newIndexArray) {$newIndexArray-1;($ipArpArray->$j->0);"";($ipArpArray->$j->1);($ipArpArray->$j->2);($ipArpArray->$j->4);($ipArpArray->$i->3)}; 
                :set newIndexArray ($newIndexArray + 1);
            }
        }
        :for j from=0 to=$ipAddressIndexArray do={
            :local findDestination [:find key=($interfaceArray->$i->0) in=($ipAddressArray->$j)];
            if ([:tostr [$findDestination]] != "") do={
                :set ($newArray->$newIndexArray) {$newIndexArray-1;($interfaceArray->$i->0);($interfaceArray->$i->1);($interfaceArray->$i->2);($ipAddressArray->$j->1);($ipAddressArray->$j->2);($interfaceArray->$i->3)}; 
                :set newIndexArray ($newIndexArray + 1);
            }
        }
    }
    :set newIndexArray ($newIndexArray - 1);

    # list output to terminal
    :for i from=0 to=$newIndexArray do={
        :set ($newArray->$i->0) ([:pick [:tostr [($newArray->$i->0 . "                         ")]] 0  6 ]);
        :set ($newArray->$i->1) ([:pick [:tostr [($newArray->$i->1 . "                         ")]] 0 21 ]);
        :set ($newArray->$i->2) ([:pick [:tostr [($newArray->$i->2 . "                         ")]] 0 25 ]);
        :set ($newArray->$i->3) ([:pick [:tostr [($newArray->$i->3 . "                         ")]] 0 19 ]);
        :set ($newArray->$i->4) ([:pick [:tostr [($newArray->$i->4 . "                         ")]] 0 20 ]);
        :set ($newArray->$i->5) ([:pick [:tostr [($newArray->$i->5 . "                         ")]] 0 17 ]);
        :set ($newArray->$i->6) ([:pick [:tostr [($newArray->$i->6 . "                         ")]] 0 35 ]);
        :put (($newArray->$i->0)." ".($newArray->$i->1)." ".($newArray->$i->2)." ".($newArray->$i->3)." ".($newArray->$i->4)." ".($newArray->$i->5)." ".($newArray->$i->6));
    }
}



Надеюсь, так лучше...


GRISHA765
Сообщения: 3
Зарегистрирован: 01 ноя 2020, 18:18

Virtue писал(а): 11 фев 2021, 23:52
yurchenkoyuriy писал(а): 09 фев 2021, 17:55 А чтобы результат отправить в телегу
GRISHA765 писал(а): 11 фев 2021, 18:46 Хотелось бы такойже скрипт для телеграмма. А вот как сделать так я незнаю.
дык тут знать то много и не нада, результаты данного скрипта записываем в переменную, содержимое данной переменной отправляем в телегу например простым скриптом telega_test из моей темы управление с телеги
я очень тупой а как засунуть информацию скрипта в переменную. Как я не сувал он спамит, каждое сообщение с ip, не сразу всю инфу а отдельно.


Аватара пользователя
Virtue
Сообщения: 148
Зарегистрирован: 07 мар 2014, 10:17

GRISHA765 писал(а): 05 апр 2021, 22:30 Как я не сувал он спамит, каждое сообщение с ip, не сразу всю инфу а отдельно.
у телеги есть ограничения на количество символов в одном сообщении..
вы определитесь сначала какую инфу будете отправлять, затем нужно будет запихнуть ее в переменную, как это сделать проще посмотреть в моей теме (оповещение в телегу) viewtopic.php?t=12043 и сделать по аналогии
Последний раз редактировалось Virtue 26 янв 2025, 18:38, всего редактировалось 2 раза.


Аватара пользователя
drpioneer
Сообщения: 175
Зарегистрирован: 30 май 2013, 10:20

Приветствую!
heracker писал(а): 06 фев 2024, 10:17 Прекрасный скрипт
Как бы его результат вывести в файл?
Чтобы дергать его по триггеру и забирать результат в файле.
:men: Получите-распишитесь:

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




# Script for building a network table by drPioneer
# https://forummikrotik.ru/viewtopic.php?p=92265#p92265
# tested on ROS 6.49.10 & 7.12
# updated 2024/02/06

:do {
  :local myFile "";     # file name, for example "nmap.txt"

  # tool ip-scan list
  /tool ip-scan duration=30s;

  # interface list
  :local ifcCnt 0; :local ifc {"";"";"";""};
  /interface;
  :foreach ifcIdx in=[find running=yes] do={
    :local ifcNam [get $ifcIdx name];
    :local ifcMac [get $ifcIdx mac-address];
    :local ifcCmt [get $ifcIdx comment];
    :local ifcHst [/system identity get name];
    :set ($ifc->$ifcCnt) {$ifcNam;$ifcHst;$ifcMac;$ifcCmt};
    :set ifcCnt ($ifcCnt+1);
  }
  :set ifcCnt ($ifcCnt-1);

  # bridge host list
  :local hstCnt 0; :local hst {"";"";"";"";"";""};
  /interface bridge host;
  :foreach hstIdx in=[find] do={
    :do {
      :local hstCmt ""; :local hstNam ""; :local hstIpa "";
      :local hstIfc [get $hstIdx on-interface];
      :local hstMac [get $hstIdx mac-address];
      :local hstBrg [get $hstIdx bridge];
      :if ([get $hstIdx local]=true) do={ 
        :set hstNam [/system identity get name];
        :set hstIpa [/ip address get [find interface=$hstBrg] address];
      } else={
        /ip dhcp-server lease;
        :do {
          :set hstNam [get [find mac-address=$hstMac] host-name];
          :set hstIpa [get [find mac-address=$hstMac] address];
          :set hstCmt [get [find mac-address=$hstMac] comment];
        } on-error={
          :set hstNam [get [find mac-address=$hstMac dynamic=yes] host-name];
          :set hstIpa [get [find mac-address=$hstMac dynamic=yes] address];
        }
      }
      :set ($hst->$hstCnt) {$hstIfc;$hstNam;$hstMac;$hstIpa;$hstBrg;$hstCmt};
      :set hstCnt ($hstCnt+1);
    } on-error={}
  }
  :set hstCnt ($hstCnt-1);

  # ip address list
  :local ipaCnt 0; :local ipa {"";"";"";""};
  /ip address;
  :foreach ipaIdx in=[find] do={
    :local ipaIfc [get $ipaIdx interface];
    :local ipaAdr [get $ipaIdx address];
    :local ipaNet [get $ipaIdx network];
    :local ipaCmt [get $ipaIdx comment];
    :set ($ipa->$ipaCnt) {$ipaIfc;$ipaAdr;$ipaNet;$ipaCmt};
    :set ipaCnt ($ipaCnt+1);
  }
  :set ipaCnt ($ipaCnt-1);

  # ip arp list
  :local arpCnt 0; :local arp {"";"";"";"";""};
  /ip arp;
  :foreach arpIdx in=[find] do={
    :local arpIfc [get $arpIdx interface];
    :local arpIpa [get $arpIdx address];
    :local arpMac [get $arpIdx mac-address];
    :local arpCmt [get $arpIdx comment];
    :local arpNet "";
    :do {:set arpNet [/ip dhcp-client get [find interface=$arpIfc] gateway]} on-error={}
    :if ($arpNet=$arpIpa) do={:set arpNet "GATEWAY"}
    :local equMac false;
    :for i from=0 to=$hstCnt do={
      :local fndDst [:find key=$arpMac in=($hst->$i)];
      :if ([:tostr [$fndDst]]!="") do={:set equMac true}
    }
    :if ($equMac=false) do={
      :do {
        /interface bridge host;
        :if ([get [find mac-address=$arpMac] on-interface]!="") do={
          :set arpNet $arpIfc;
          :set arpIfc [get [find mac-address=$arpMac] on-interface];
        }
      } on-error={}
      :set ($arp->$arpCnt) {$arpIfc;$arpMac;$arpIpa;$arpCmt;$arpNet};
      :set arpCnt ($arpCnt+1);
    }
  }
  :set arpCnt ($arpCnt-1);

  # build list
  :local arrIdx 1; :local arr {"";"";"";"";"";"";""};
  :set ($arr->0) {"NUMBER";"INTERFACE";"HOST-NAME";"MAC-ADDRESS";"IP-ADDRESS";"NETWORK";"REMARK"};
  :set ($arr->1) {"";"";"";"";"";"";""};
  :for i from=0 to=$ifcCnt do={
    :for j from=0 to=$hstCnt do={
      :local fndDst [:find key=($hst->$j->0) in=($ifc->$i)];
      :if ([:tostr [$fndDst]]!="" && ($hst->$j->4)!=($hst->$j->0)) do={
        :if (($hst->$j->2)=($ifc->$i->2)) do={
          :set ($arr->$arrIdx) {$arrIdx;($hst->$j->0);($hst->$j->1);($hst->$j->2);($hst->$j->3);($hst->$j->4);($ifc->$i->3)}; 
        } else={
          :set ($arr->$arrIdx) {$arrIdx;($hst->$j->0);($hst->$j->1);($hst->$j->2);($hst->$j->3);($hst->$j->4);($hst->$j->5)}; 
        }
        :set arrIdx ($arrIdx+1);
      }
    }
    :for j from=0 to=$arpCnt do={
      :local fndDst [:find key=($arp->$j->0) in=($ifc->$i)];
      :if ([:tostr [$fndDst]]!="") do={
        :set ($arr->$arrIdx) {$arrIdx;($arp->$j->0);"";($arp->$j->1);($arp->$j->2);($arp->$j->4);($arp->$i->3)}; 
        :set arrIdx ($arrIdx+1);
      }
    }
    :for j from=0 to=$ipaCnt do={
      :local fndDst [:find key=($ifc->$i->0) in=($ipa->$j)];
      :if ([:tostr [$fndDst]]!="") do={
        :set ($arr->$arrIdx) {$arrIdx;($ifc->$i->0);($ifc->$i->1);($ifc->$i->2);($ipa->$j->1);($ipa->$j->2);($ifc->$i->3)}; 
        :set arrIdx ($arrIdx+1);
      }
    }
  }
  :set arrIdx ($arrIdx-1);

  # output list
  :global outNetMap "";
  :local TextCut do={:return [:pick "$1                                             " 0 $2]}
  :for i from=0 to=$arrIdx do={
    :set outNetMap ("$outNetMap\r\n$[$TextCut ($arr->$i->0) 3]\t$[$TextCut ($arr->$i->3) 17]\t$[$TextCut ($arr->$i->4) 18]\t\
    $[$TextCut ($arr->$i->1) 18]\t$[$TextCut ($arr->$i->5) 15]\t$[$TextCut ($arr->$i->2) 21]\t$[$TextCut ($arr->$i->6) 35]");
  }
  :put ("---------------------------------------------------------------------------------------------------------------------------$outNetMap");
  :if ([:len $myFile]!=0) do={
    :local fileName ("$[/system identity get name]_$myFile");
    :execute script=":global outNetMap; :put (\"$outNetMap\");" file=$fileName;
    :put ("File '$fileName' was successfully created");
  } else={:put ("File creation is not enabled")}
} on-error={:put "Problem in work 'NetMap' script"}
/system script environment remove [find name~"outNetMap"];


Зеркало тут.


DmSp
Сообщения: 9
Зарегистрирован: 24 сен 2024, 14:04

Спасибо автору за скрипт. Поигрался сегодня с ним. Скачал последнюю версию с гитхаба по ссылке выше (зеркало тут). В сообщениях этой ветки уже старые версии. Автор быстро эволюционирует и код меняется.

Замечания
1. Имя скрипта нужно задавать NetMap. такое имя забито в код автором и на него привязан лог ошибки.
2. Если нужно сохранять в файл не основной памяти, а на флешку то смотрим в роутере System-Disk-Slot. у меня там usb1 - значит в скрипте я правлю такие строки:
:local myFile "nmap"; # file name, for example "nmap.txt"
:local fileName ("/usb1/$myFile");
Вопрос к автору
1.Хочу любезно попросить выложить пошаговую инструкцию для чайников, как всё это отправлять в чат бота телеги. Хоть текстом, хоть файл txt.
2. Совсем круто если в чате бота создать кнопку "NMAP" по нажатии на которую роутер будет присылать ответ.
3. После работы скрипта весь лог роутера забит system.info
4. Задуманная автором команда отчёта put Успешно/Недоступно не отрабатывает
5. Ну и глобальная переменная output сама не удаляется и висит после работы.
6. У меня крутится докер контейнер.Но я не по инструкции делал отдельную подсеть ему. Виртуальному интерфейсу дал ip из основного бриджа. Скрипт интерфейс выводит, но вместо ip контейнера выдаёт IP шлюза/24.

P.S. я не разраб и в скрипты не дружу. прошу сильно не пинать и отвечать попроще. Спасибо!
Изображение


hap AC2 / ROS 7.15.2
Аватара пользователя
drpioneer
Сообщения: 175
Зарегистрирован: 30 май 2013, 10:20

Приветствую!
DmSp писал(а): 24 сен 2024, 19:33 1.Хочу любезно попросить выложить пошаговую инструкцию для чайников, как всё это отправлять в чат бота телеги. Хоть текстом, хоть файл txt.
2. Совсем круто если в чате бота создать кнопку "NMAP" по нажатии на которую роутер будет присылать ответ.
Такой функционал в скрипте не предусмотрен.
DmSp писал(а): 24 сен 2024, 19:33 3. После работы скрипта весь лог роутера забит system.info
На приложенном скриншоте представлены только факты сохранения скрипта 'NetMap' после внесения очередных изменений в него пользователем 'admin'.
Так настроена ваша система. Для ROS 7.1x это нормально.
DmSp писал(а): 24 сен 2024, 19:33 4. Задуманная автором команда отчёта put Успешно/Недоступно не отрабатывает
Опишите подробнее, как выглядит неработоспособность вывода отчета?
Вы запускаете скрипт командой: '/system script run netmap' и ничего не происходит? Быть может появляются какие-то сообщения об ошибках? Может ещё какие наблюдения?
DmSp писал(а): 24 сен 2024, 19:33 5. Ну и глобальная переменная output сама не удаляется и висит после работы.
Последняя строка скрипта содержит в себе команду на удаление глобальной переменной 'outNetMap'. Вполне возможно, когда в процессе работы скрипта по какой-то причине возникают ошибки и дело не доходит до выполнения последней строки, тогда эта переменная остаётся в памяти устройства.
DmSp писал(а): 24 сен 2024, 19:33 6. У меня крутится докер контейнер.Но я не по инструкции делал отдельную подсеть ему. Виртуальному интерфейсу дал ip из основного бриджа. Скрипт интерфейс выводит, но вместо ip контейнера выдаёт IP шлюза/24.
:ne_vi_del:
Допускаю неверную обработку данных при работе скрипта.
Будет здорово, если сможете указать как исправить косяк, и ничего не поломать.
DmSp писал(а): 24 сен 2024, 19:33 P.S. я не разраб и в скрипты не дружу. прошу сильно не пинать и отвечать попроще.
Пишу для покрытия своих потребностей и делюсь наработками с общественностью...
Чем богаты, тем и рады.


DmSp
Сообщения: 9
Зарегистрирован: 24 сен 2024, 14:04

Спасибо за ответ!
1. Такой функционал в скрипте не предусмотрен.
Ясно, что не предусмотрен. Очень мне понравилось играть со скриптами, шикарно расширяют возможности роутера. Для себя вижу отличное применение данного скрипта это удалённо, по запросу через бота ТГ получить список хостов, находясь вдали от роутера. Но как это сделать не знаю. Вот и написал тут.
2. Так настроена ваша система. Для ROS 7.1x это нормально.
Да прошу прощения. Вчитался в логи. Это изменения конфигурации. Я думал это лог работы. Вечер был. Устал.
3. Опишите подробнее, как выглядит неработоспособность вывода отчета?
вот эта функция скрипта:
:put ("File '$fileName' was successfully created");
} else={:put ("File creation is not enabled")}
} on-error={:put "Problem in work 'NetMap' script"}
я так понимаю она должна выводить в лог результат. Не выводит. В моём скриншоте видно отсутствие.
4.Вы запускаете скрипт командой: '/system script run netmap' и ничего не происходит?
Не через терминал. GUI кнопкой run из самого скрипта. Ну это тоже самое.
5. Быть может появляются какие-то сообщения об ошибках?
Нет. Вот приложен скрин лога. Ничо нет.
6. " глобальной переменной 'outNetMap'." с ваших слов я понял, что раз не выполняется put выше, то до очистки переменной не доходит.
Мои познания в скриптах одна миллионная от Вашей. Если разберусь с логикой скрипта и моим контейнером - отпишусь.


hap AC2 / ROS 7.15.2
Аватара пользователя
drpioneer
Сообщения: 175
Зарегистрирован: 30 май 2013, 10:20

DmSp писал(а): 26 сен 2024, 19:12 я так понимаю она должна выводить в лог результат. Не выводит. В моём скриншоте видно отсутствие.
Результат работы скрипта выводится в терминал.
DmSp писал(а): 26 сен 2024, 19:12 4.Вы запускаете скрипт командой: '/system script run netmap' и ничего не происходит?
Не через терминал. GUI кнопкой run из самого скрипта. Ну это тоже самое.

5. Быть может появляются какие-то сообщения об ошибках?
Нет. Вот приложен скрин лога. Ничо нет.
Запускайте скрипт из терминала.
DmSp писал(а): 26 сен 2024, 19:12 1. Такой функционал в скрипте не предусмотрен.
Ясно, что не предусмотрен. Очень мне понравилось играть со скриптами, шикарно расширяют возможности роутера. Для себя вижу отличное применение данного скрипта это удалённо, по запросу через бота ТГ получить список хостов, находясь вдали от роутера. Но как это сделать не знаю. Вот и написал тут.
Возможно для решения этой задачи вам подойдет скрипт мониторинга клиентов сети в связке со скриптом оповещения в Телеграм


DmSp
Сообщения: 9
Зарегистрирован: 24 сен 2024, 14:04

Спасибо за быстрый ответ!
Разобрался с контейнером. Сейчас скрипт видит только mac адрес виртуального интерфейса микротика. и выводит в отчёт скрипта IP шлюза. Я раскомментировал в вашем скрипте /tool ip-scan и после этого в списке /bridge hosts появляется мак адрес самого контейнера. На 3-4 минуты, потом исчезает. Но этого достаточно для успешной работы скрипта.
Насчёт запускать в терминале - это надо быть за компом. Лично я вижу огромную ценность данного скрипта это получить отчёт удалённо. Особенно если роутер за NAT, а ты в другом городе/стране/континенте, но отчёт придёт в ТГ.


hap AC2 / ROS 7.15.2
Ответить