Обнаружена блокировка рекламы: Наш сайт существует благодаря показу онлайн-рекламы нашим посетителям. Пожалуйста, подумайте о поддержке нас, отключив блокировщик рекламы на нашем веб-сайте.
Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
drpioneer
Сообщения: 150 Зарегистрирован: 30 май 2013, 10:20
14 сен 2020, 02:18
Всех приветствую.
Подправил скрипт. Проверяйте.
Код: Выделить всё
# Script for building a network table
# https://forummikrotik.ru/viewtopic.php?p=70575
# tested on ROS 6.47
# updated 2020/09/14
# interface list
:global interfaceIndexArray 0;
:global interfaceArray {"";"";"";""};
foreach interfaceIndex in=[ /interface find running=yes; ] do={
:local interfaceName ([ /interface get $interfaceIndex name; ]);
:local interfaceHost ([ /system resource get board-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
:global bridgeHostIndexArray 0;
:global 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 resource get board-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
:global ipAddressIndexArray 0;
:global 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
:global ipArpIndexArray 0;
:global 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 ipArpName ("");
:do {
:set ipArpName ([ /ip dhcp-client get [find interface=$ipArpInterface ] gateway ]);
} on-error={ }
if ($ipArpName = $ipArpIP) do={ :set ipArpName ("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={
:set ($ipArpArray->$ipArpIndexArray) {$ipArpInterface;$ipArpMACAddress;$ipArpIP;$ipArpComment;$ipArpName};
:set ipArpIndexArray ($ipArpIndexArray + 1);
}
}
:set ipArpIndexArray ($ipArpIndexArray - 1);
# build new list
:global newIndexArray 2;
:global 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->4);($ipArpArray->$j->1);($ipArpArray->$j->2);"";($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));
}
# clearing variables
:set interfaceIndexArray (:);
:set interfaceArray (:);
:set bridgeHostIndexArray (:);
:set bridgeHostArray (:);
:set ipAddressIndexArray (:);
:set ipAddressArray (:);
:set ipArpIndexArray (:);
:set ipArpArray (:);
:set newIndexArray (:);
:set newArray (:);
Замечания/улучшения приветствуются.
yarvelov
Сообщения: 92 Зарегистрирован: 15 июл 2018, 02:08
14 сен 2020, 08:32
На моих железках вывод идентичен прошлой версии, что-то должно было измениться?
drpioneer
Сообщения: 150 Зарегистрирован: 30 май 2013, 10:20
14 сен 2020, 08:43
Добрый день
yarvelov писал(а): ↑ 14 сен 2020, 08:32
На моих железках вывод идентичен прошлой версии, что-то должно было измениться?
Должны появиться устройства из ip arp, отсутствующие в ip dhcp.
У вас не появились?
yarvelov
Сообщения: 92 Зарегистрирован: 15 июл 2018, 02:08
14 сен 2020, 09:31
drpioneer писал(а): ↑ 14 сен 2020, 08:43
Добрый день
yarvelov писал(а): ↑ 14 сен 2020, 08:32
На моих железках вывод идентичен прошлой версии, что-то должно было измениться?
Должны появиться устройства из ip arp, отсутствующие в ip dhcp.
У вас не появились?
Добрый день
Да, видно на бридже их, не на портах самих, так должно быть?
drpioneer
Сообщения: 150 Зарегистрирован: 30 май 2013, 10:20
25 сен 2020, 02:34
Приветствую.
yarvelov писал(а): ↑ 14 сен 2020, 09:31
Да, видно на бридже их, не на портах самих, так должно быть?
Недочёт подправил. Проверяйте.
Код: Выделить всё
# Script for building a network table
# https://forummikrotik.ru/viewtopic.php?p=70575
# tested on ROS 6.47
# updated 2020/09/25
# interface list
:global interfaceIndexArray 0;
:global interfaceArray {"";"";"";""};
foreach interfaceIndex in=[ /interface find running=yes; ] do={
:local interfaceName ([ /interface get $interfaceIndex name; ]);
:local interfaceHost ([ /system resource get board-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
:global bridgeHostIndexArray 0;
:global 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 resource get board-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
:global ipAddressIndexArray 0;
:global 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
:global ipArpIndexArray 0;
:global 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
:global newIndexArray 2;
:global 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));
}
# clearing variables
:set interfaceIndexArray (:);
:set interfaceArray (:);
:set bridgeHostIndexArray (:);
:set bridgeHostArray (:);
:set ipAddressIndexArray (:);
:set ipAddressArray (:);
:set ipArpIndexArray (:);
:set ipArpArray (:);
:set newIndexArray (:);
:set newArray (:);
Ну и как всегда - замечания, улучшения только приветствуются.
yarvelov
Сообщения: 92 Зарегистрирован: 15 июл 2018, 02:08
25 сен 2020, 12:58
drpioneer писал(а): ↑ 25 сен 2020, 02:34
Приветствую.
yarvelov писал(а): ↑ 14 сен 2020, 09:31
Да, видно на бридже их, не на портах самих, так должно быть?
Недочёт подправил. Проверяйте.
Код: Выделить всё
# Script for building a network table
# https://forummikrotik.ru/viewtopic.php?p=70575
# tested on ROS 6.47
# updated 2020/09/25
# interface list
:global interfaceIndexArray 0;
:global interfaceArray {"";"";"";""};
foreach interfaceIndex in=[ /interface find running=yes; ] do={
:local interfaceName ([ /interface get $interfaceIndex name; ]);
:local interfaceHost ([ /system resource get board-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
:global bridgeHostIndexArray 0;
:global 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 resource get board-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
:global ipAddressIndexArray 0;
:global 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
:global ipArpIndexArray 0;
:global 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
:global newIndexArray 2;
:global 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));
}
# clearing variables
:set interfaceIndexArray (:);
:set interfaceArray (:);
:set bridgeHostIndexArray (:);
:set bridgeHostArray (:);
:set ipAddressIndexArray (:);
:set ipAddressArray (:);
:set ipArpIndexArray (:);
:set ipArpArray (:);
:set newIndexArray (:);
:set newArray (:);
Ну и как всегда - замечания, улучшения только приветствуются.
Добрый день! Похоже все теперь на местах)
sergs
Сообщения: 1 Зарегистрирован: 28 сен 2020, 09:04
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 имя!
остается сопоставить интерфейсы по мак адресам с остальной информацией и свести все в одну таблицу.
podarok66
Модератор
Сообщения: 4362 Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО
28 сен 2020, 20:31
Вот интересно, почему в комментах подключённых устройств всегда один и тот же коммент пишет? В частности в моём примере HT20
Код: Выделить всё
NUMBER INTERFACE HOST NAME MAC ADDRESS IP ADDRESS NETWORK COMMENT
1 ether2 00:13:19:3A:D0:80 172.27.39.1 GATEWAY TV
2 ether2 RB951Ui-2HnD C8:0A:A9:D5:2B:0A 172.27.35.27/21 172.27.32.0 Default config
3 ether5 RB951Ui-2HnD D4:CA:6D:91:20:8B 192.168.100.10/24 bridge In TVHost
4 Mikrotik 20:A6:0C:11:64:45 192.168.100.99 bridge Guest-sep/23/2020-17:35:24
5 Mikrotik Honor_10_Lite-dc3a246b537 44:55:C4:1A:F3:EE 192.168.100.97 bridge Guest-sep/26/2020-23:38:40
6 bridge F4:7B:5E:68:A9:AD 192.168.100.25 HT20
7 bridge C4:46:19:3B:41:52 192.168.100.34 HT20
8 bridge F8:3F:51:77:0B:1E 192.168.100.75 HT20
9 bridge 00:03:AB:E5:15:32 192.168.100.77 HT20
10 bridge D4:CA:6D:90:41:64 192.168.100.33 HT20
11 bridge RB951Ui-2HnD D4:CA:6D:CA:35:21 192.168.100.10/24 192.168.100.0
12 loopback RB951Ui-2HnD 62:D7:B9:1F:F2:EB 10.255.255.2/32 10.255.255.2
13 ovpn-out-1195-DO RB951Ui-2HnD 02:94:A4:CE:0F:21 10.12.0.6/32 10.12.0.5
14 ovpn-out-DO RB951Ui-2HnD 02:94:A4:CE:0F:21 10.9.0.3/32 10.9.0.1
15 sstp-out1 RB951Ui-2HnD 10.10.10.2/32 10.10.10.1
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Virtue
Сообщения: 142 Зарегистрирован: 07 мар 2014, 10:17
29 сен 2020, 17:01
у меня кстати, тоже самое.. копирует коммент, причем сам коммент не соответствует ни одной из этих записей (это про второй коммент), а с первым все верно:
NUMBER INTERFACE HOST NAME MAC ADDRESS IP ADDRESS NETWORK COMMENT
1 ether1 гыук-pc FC:AA:14:7E:F5:F8 192.168.88.254 bridge1-local pc_new
2 ether2-efr B8:A3:86:4C:E3:C3 192.168.54.79 bridge2-efr andryuha
3 ether2-efr 00:04:96:4D:70:F8 192.168.54.1 bridge2-efr andryuha
4 ether2-efr 74:4D:28:49:C2:9D 192.168.54.21 bridge2-efr andryuha
drpioneer
Сообщения: 150 Зарегистрирован: 30 май 2013, 10:20
15 окт 2020, 19:16
podarok66 писал(а): ↑ 28 сен 2020, 20:31
почему в комментах подключённых устройств всегда один и тот же коммент пишет? В частности в моём примере HT20
Код: Выделить всё
6 bridge F4:7B:5E:68:A9:AD 192.168.100.25 HT20
7 bridge C4:46:19:3B:41:52 192.168.100.34 HT20
8 bridge F8:3F:51:77:0B:1E 192.168.100.75 HT20
9 bridge 00:03:AB:E5:15:32 192.168.100.77 HT20
10 bridge D4:CA:6D:90:41:64 192.168.100.33 HT20
Приветствую.
Добрался до скрипта. Нашёл ошибку, исправил. Проверяйте.
Код: Выделить всё
# Script for building a network table
# https://forummikrotik.ru/viewtopic.php?p=70575
# tested on ROS 6.47
# updated 2020/10/15
# interface list
:global interfaceIndexArray 0;
:global interfaceArray {"";"";"";""};
foreach interfaceIndex in=[ /interface find running=yes; ] do={
:local interfaceName ([ /interface get $interfaceIndex name; ]);
:local interfaceHost ([ /system resource get board-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
:global bridgeHostIndexArray 0;
:global 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 resource get board-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
:global ipAddressIndexArray 0;
:global 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
:global ipArpIndexArray 0;
:global 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;$ipArpNetwork;$ipArpComment};
:set ipArpIndexArray ($ipArpIndexArray + 1);
}
}
:set ipArpIndexArray ($ipArpIndexArray - 1);
# build new list
:global newIndexArray 2;
:global 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);" >> IP/ARP <<";($ipArpArray->$j->1);($ipArpArray->$j->2);($ipArpArray->$j->3);($ipArpArray->$j->4)};
: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));
}
# clearing variables
:set interfaceIndexArray (:);
:set interfaceArray (:);
:set bridgeHostIndexArray (:);
:set bridgeHostArray (:);
:set ipAddressIndexArray (:);
:set ipAddressArray (:);
:set ipArpIndexArray (:);
:set ipArpArray (:);
:set newIndexArray (:);
:set newArray (:);
Замечания/улучшения приветствуются.