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

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

Всех приветствую!

Нарисовал на досуге скрипт, выводящий список задействованных интерфейсов роутера и подключенных к ним устройств. Надеюсь пригодится для упрощения ревизии устройств в сети. Особенность скрипта в том, что используется информация от DHCP сервера, где всем клиентам предоставлены СТАТИЧЕСКИЕ адреса, при этом задействованы комментарии, в которых описаны названия DHCP клиентов.
Код нужно скопировать в буфер и просто вставить в терминале Mikrotik'а:

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


# Script for building a network table
# https://forummikrotik.ru/viewtopic.php?p=70575#p70575
# tested on ROS 6.46.5
# updated 2020/05/20

# Enumeration of interfaces
foreach interfaceIndex in=([ /interface find; ]) do={
    :local interfaceName ([ /interface get $interfaceIndex name; ]);
    :local bridgeIndexes ([ /interface bridge find; ]);
    :local bridgeIP ("not IP-address");;
    :local bridgeName ("not bridge name");
    :local bridgeHosts;

# Enumeration of bridges
    foreach bridgeIndex in=$bridgeIndexes do={
        :set bridgeName ([ /interface bridge get $bridgeIndex name; ]);
        :set bridgeHosts ([ /interface bridge host find bridge=$bridgeName; ]);

# Find IP address of bridges
        foreach ipAddressIndex in=([ /ip address find; ]) do={
            :local interfaceNameIpAddress ([ /ip address get $ipAddressIndex interface; ]); 
            :local interfaceHostIpAddress ([ /ip address get $ipAddressIndex address; ]); 
            if ($interfaceNameIpAddress = $bridgeName) do={ :set bridgeIP ($interfaceHostIpAddress); }
        }

# Enumeration of hosts
        foreach bridgeHost in=$bridgeHosts do={
            :local hostMAC ([ /interface bridge host get $bridgeHost mac-address; ]);
            :local hostInterface ([ /interface bridge host get $bridgeHost on-interface; ]);
            :local hostComment ("no comments");
            :local hostName ("not host name");
            :local hostIP ("not IP-address");
            if ([ /interface bridge host get $bridgeHost local; ] = true) do={ 
                :set hostName ([ /system resource get board-name; ]);
                :set hostIP ($bridgeIP);
            }

# Checking for MAC-address in DHCP leases
            if ([ /ip dhcp-server lease find mac-address=$hostMAC; ] != "") do={
                :local hostNumber ([ /ip dhcp-server lease find mac-address=$hostMAC; ])
                :set hostName ([ /ip dhcp-server lease get $hostNumber host-name; ]);
                :set hostComment ([ /ip dhcp-server lease get $hostNumber comment; ]);
                :set hostIP ([ /ip dhcp-server lease get $hostNumber address; ]);
            }

# Output if interface and host names match
            if (($interfaceName = $hostInterface) && ($interfaceName != $bridgeName)) do={
                :put ($hostInterface." -> \t".$hostName." (".$hostMAC.")\t remark: ".$hostComment." -> \t".$hostIP." -> \t".$bridgeName);
            }
        }
    }

# Enumeration ip addresses
    foreach ipAddressIndex in=([ /ip address find; ]) do={
        :local interfaceNameIpAddress ([ /ip address get $ipAddressIndex interface; ]); 
        :local interfaceHostIpAddress ([ /ip address get $ipAddressIndex address; ]); 
        :local interfaceMACAddress ([ :tostr [ /interface get [ /interface find name=$interfaceNameIpAddress ; ] mac-address ]]);
        if ($interfaceMACAddress = "") do={ :set interfaceMACAddress ("not MAC-address"); }
        :local hostName ([ /system resource get board-name; ]);
        if ($interfaceName = $interfaceNameIpAddress) do={ 
            :put ($interfaceNameIpAddress." -> \t".$hostName." (".$interfaceMACAddress.") -> \t".$interfaceHostIpAddress);
        }
    }
}

Живой пример работы скрипта:

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

ether1 ->       DESKTOP-O15N7PI (04:92:xx:xx:xx:xx)      remark: NB Asus FX504GM ether ->       192.168.xxx.xxx ->      bridge
ether1 ->       DESKTOP-FJV3R7T (10:78:xx:xx:xx:xx)      remark: PC Masik ether ->      192.168.xxx.xxx ->      bridge
ether1 ->       RB2011UAS-2HnD (D4:CA:xx:xx:xx:xx)       remark: no comments ->         192.168.xxx.xxx/24 ->     bridge
ether3 ->       DESKTOP-SD629I9 (54:04:xx:xx:xx:xx)      remark: PC Egor ether ->       192.168.xxx.xxx ->      bridge
ether3 ->       RB2011UAS-2HnD (D4:CA:xx:xx:xx:xx)       remark: no comments ->         192.168.xxx.xxx/24 ->     bridge
ether4 ->       RB2011UAS-2HnD (D4:CA:xx:xx:xx:xx)       remark: no comments ->         192.168.xxx.xxx/24 ->     bridge
ether4 ->       steamlink-9A6B (E0:31:xx:xx:xx:xx)       remark: MP SteamLink ether ->  192.168.xxx.xxx ->       bridge
ether6 ->       GIGASET C610A-IP (7C:2F:xx:xx:xx:xx)     remark: Gigaset C610A IP ether ->      192.168.xxx.xxx ->      bridge
ether6 ->       RB2011UAS-2HnD (D4:CA:xx:xx:xx:xx)       remark: no comments ->         192.168.xxx.xxx/24 ->     bridge
ether8 ->       DUNE-HD (00:16:xx:xx:xx:xx)              remark: MP Dune HD-301 ether ->        192.168.xxx.xxx ->       bridge
ether8 ->       DESKTOP-08AEN7 (5C:F9:xx:xx:xx:xx)       remark: NB Dell inspiron 7720 ether ->         192.168.xxx.xxx ->      bridge
ether8 ->       RB2011UAS-2HnD (D4:CA:xx:xx:xx:xx)       remark: no comments ->         192.168.xxx.xxx/24 ->     bridge
ether9-ulan-ISP ->      RB2011UAS-2HnD (04:92:xx:xx:xx:xx) ->   176.118.xxx.xxx/20
ether10-qwerty-ISP ->   RB2011UAS-2HnD (D4:CA:xx:xx:xx:xx) ->   79.164.xxx.xxx/20
wlan1 ->        RedmiNote7-Redmi (20:34:xx:xx:xx:xx)     remark: Redmi Note 7 Egor wifi ->      192.168.xxx.xxx ->      bridge
wlan1 ->        RedmiNote6Pro-Redmi (48:2C:xx:xx:xx:xx)  remark: Redmi Note 6Pro Masik wifi ->  192.168.xxx.xxx ->      bridge
wlan1 ->        RedmiNote6Pro-Redmi (48:2C:xx:xx:xx:xx)  remark: Redmi Note 6Pro Pioneer wifi ->        192.168.xxx.xxx ->      bridge
wlan1 ->        BRW70188BBD950F (70:18:xx:xx:xx:xx)      remark: Brother MFC-9330CDW wifi ->    192.168.xxx.xxx ->       bridge
wlan1 ->        RB2011UAS-2HnD (D4:CA:xx:xx:xx:xx)       remark: no comments ->         192.168.xxx.xxx/24 ->     bridge
wlan1 ->        RedmiNote7-ASkolDas (E0:DC:xx:xx:xx:xx)  remark: Redmi Note 7 Danya wifi ->     192.168.xxx.xxx ->      bridge
bridge ->       RB2011UAS-2HnD (D4:CA:xx:xx:xx:xx) ->   192.168.xxx.xxx/24
bridge_guest ->         RB2011UAS-2HnD (D6:CA:xx:xx:xx:xx) ->   10.11.xxx.xxx/24
sstp-xxxxxovo ->        RB2011UAS-2HnD (not MAC-address) ->     192.168.xxx.xxx/32
sstp-xxxxxxovo ->       RB2011UAS-2HnD (not MAC-address) ->     192.168.xxx.xxx/32
На одном из удаленных объектов при помощи этого же скрипта поймал вот такое:

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

ether5 ->       not host name (00:00:02:00:00:00)        remark: no comments ->         not IP-address ->       bridge
ether5 ->       not host name (00:00:03:00:00:00)        remark: no comments ->         not IP-address ->       bridge
Теперь разбираюсь, что это за нЕвидаль такая...
Надо признать, что до запуска скрипта не подозревал о проблемах в сети...

Конструктивная критика и усовершенствования только приветствуются.


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

Вариант скрипта со структурированным выводом, но возможным обрезанием текста:

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


# Script for building a network table
# https://forummikrotik.ru/viewtopic.php?p=70575#p70575 
# tested on ROS 6.46.5
# updated 2020/05/20

# Enumeration of interfaces
foreach interfaceIndex in=([ /interface find; ]) do={
    :local interfaceName ([ /interface get $interfaceIndex name; ]);
    :local bridgeIndexes ([ /interface bridge find; ]);
    :local bridgeIP ("not IP-address");;
    :local bridgeName ("not bridge name");
    :local bridgeHosts;

# Enumeration of bridges
    foreach bridgeIndex in=$bridgeIndexes do={
        :set bridgeName ([ /interface bridge get $bridgeIndex name; ]);
        :set bridgeHosts ([ /interface bridge host find bridge=$bridgeName; ]);

# Find IP address of bridges
        foreach ipAddressIndex in=([ /ip address find; ]) do={
            :local interfaceNameIpAddress ([ /ip address get $ipAddressIndex interface; ]); 
            :local interfaceHostIpAddress ([ /ip address get $ipAddressIndex address; ]); 
            if ($interfaceNameIpAddress = $bridgeName) do={ :set bridgeIP ($interfaceHostIpAddress); }
        }

# Enumeration of hosts
        foreach bridgeHost in=$bridgeHosts do={
            :local hostMAC ([ /interface bridge host get $bridgeHost mac-address; ]);
            :local hostInterface ([ /interface bridge host get $bridgeHost on-interface; ]);
            :local hostComment ("no comments");
            :local hostName ("not host name");
            :local hostIP ("not IP-address");
            if ([ /interface bridge host get $bridgeHost local; ] = true) do={ 
                :set hostName ([ /system resource get board-name; ]);
                :set hostIP ($bridgeIP);
            }

# Checking for MAC-address in DHCP leases
            if ([ /ip dhcp-server lease find mac-address=$hostMAC; ] != "") do={
                :local hostNumber ([ /ip dhcp-server lease find mac-address=$hostMAC; ])
                :set hostName ([ /ip dhcp-server lease get $hostNumber host-name; ]);
                :set hostComment ([ /ip dhcp-server lease get $hostNumber comment; ]);
                :set hostIP ([ /ip dhcp-server lease get $hostNumber address; ]);
            }

# Output if interface and host names match
            if (($interfaceName = $hostInterface) && ($interfaceName != $bridgeName)) do={
                :local printInterface ([ :pick [( $hostInterface."                    " )] 0 16 ]);
                :local printNameMAC ([ :pick [( $hostName." (".$hostMAC.")                              " )] 0 44 ]);
                :local printComment ([ :pick [( $hostComment."                              " )] 0 30 ]);
                :local printIP ([ :pick [( $hostIP."                    " )] 0 20 ]);
                :put ($printInterface."    ".$printNameMAC." remark: ".$printComment."    ".$printIP."    ".$bridgeName);
            }
        }
    }

# Enumeration ip addresses
    foreach ipAddressIndex in=([ /ip address find; ]) do={
        :local interfaceNameIpAddress ([ /ip address get $ipAddressIndex interface; ]); 
        :local interfaceHostIpAddress ([ /ip address get $ipAddressIndex address; ]); 
        :local interfaceMACAddress ([ :tostr [ /interface get [ /interface find name=$interfaceNameIpAddress ; ] mac-address ]]);
        if ($interfaceMACAddress = "") do={ :set interfaceMACAddress ("not MAC-address"); }
        :local hostName ([ /system resource get board-name; ]);
        if ($interfaceName = $interfaceNameIpAddress) do={ 
            :local printNameIpAddress ([ :pick [( $interfaceNameIpAddress."                    " )] 0 16 ]);
            :local printNameMAC ([ :pick [( $hostName." (".$interfaceMACAddress.")                              " )] 0 44 ]);
            :put ($printNameIpAddress."    ".$printNameMAC." remark: no comments                       ".$interfaceHostIpAddress);
        }
    }
}



Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Очень хороший и полезный скрипт. Доработаете его чтобы он выводил не только устройства от DHCP-сервера, отмеченные как static-IP, но и dinamic-IP, а также устройства, которым даны статические IP (из ARP). То есть чтобы мог искать все устройства, подключенные к Микротику вне зависимости как им назначены IP-адреса.


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Горячо поддерживаю, очень интересный вариант. Спасибо...


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

Попробовал скрипт на нескольких своих роутерах.

Вот какие замечания/предложения:

1. Если скрипт находит на интерфейсе mac-адрес устройства, которого нет в /ip dhcp-server lease, то надо поискать его в других местах ...например в (в /ip arp и взять оттуда также и комментарий к этому хосту (устройству)
2. Если уж скрипт находит VPN-интерфейсы (типа pptp, l2tp, ovpn и т.д., то можно из них брать информацию и выводить её тоже (адреса, клиентов и прочее, что можно "добыть")
3. Надо искать и выводить информацию о динамических IP-хостах с опрашиваемых интерфейсов.


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Поиск хостов и печать их из /ip arp (пример)

foreach i in=[ /ip arp find] do={
:local ipARPaddress [/ip arp get $i address];
:local ipARPmacaddress [/ip arp get $i mac];
:local ARPface [/ip arp get $i interface];
:local ARPcomment [/ip arp get $i comment];
:if ([:len $ipARPmacaddress]!=0) do={
:log info ("$ipARPaddress"." $ipARPmacaddress"." $ARPface"." $ARPcomment")
}
}


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Пропал автор замечательного скрипта ... Не отвечает ничего :ny_tik:


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Появится, я надеюсь. Видимо сидит скрипты пишет.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Аватара пользователя
drpioneer
Сообщения: 142
Зарегистрирован: 30 май 2013, 10:20

Приветствую всех.

Родилась очередная версия скрипта, с полностью переделанной логикой работы:

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


# Script for building a network table
# https://forummikrotik.ru/viewtopic.php?p=70575
# tested on ROS 6.47
# updated 2020/09/05

:global troubleCode 0;
:global errorString "";

# interface list
:global interfaceIndexArray 0;
:global interfaceArray {"";"";"";"";""};
foreach interfaceIndex in=[ /interface find running=yes; ] do={
    :do {
        :local interfaceName ([ /interface get $interfaceIndex name; ]);
        :local interfaceComment ([:tostr [ /interface get $interfaceIndex comment; ]]);
        :local interfaceMAC ([:tostr [ /interface get $interfaceIndex mac-address; ]]);
        :local interfaceHost ([ /system resource get board-name; ]);
        :set ($interfaceArray->$interfaceIndexArray) {$interfaceName;$interfaceHost;$interfaceMAC;"";$interfaceComment};
        #:put ($interfaceArray->$interfaceIndexArray);
        :set interfaceIndexArray ($interfaceIndexArray + 1);
    } on-error={ :set troubleCode 1; }
}
:set interfaceIndexArray ($interfaceIndexArray - 1);
    
# interface bridge host list
:global bridgeHostIndexArray 0;
:global bridgeHostArray {"";"";"";"";"";""};
foreach bridgeHost in=[ /interface bridge host find; ] do={
    :do {
        :local hostMAC ([ /interface bridge host get $bridgeHost mac-address; ]);
        :local hostBridge ([ /interface bridge host get $bridgeHost bridge; ]);
        :local hostInterface ([ /interface bridge host get $bridgeHost on-interface; ]);
        :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; ]);
            :set hostIP ([:pick $hostIP 0 [:find $hostIP "/"]]);
        } 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};
        #:put ($bridgeHostArray->$bridgeHostIndexArray);
        :set bridgeHostIndexArray ($bridgeHostIndexArray + 1);
    } on-error={ :set troubleCode 2; }
}
:set bridgeHostIndexArray ($bridgeHostIndexArray - 1);
    
# ip address list
:global ipAddressIndexArray 0;
:global ipAddressArray {"";"";"";"";""};
foreach ipAddress in=([ /ip address find; ]) do={
    :do {
        :local ipAddressInterface ([ /ip address get $ipAddress interface; ]); 
        :local ipAddressIP ([ /ip address get $ipAddress address; ]); 
        :set ipAddressIP ([:pick $ipAddressIP 0 [:find $ipAddressIP "/"]]);
        :local ipAddressComment ([ /ip address get $ipAddress comment; ]); 
        :local interfaceHost ([ /system resource get board-name; ]);
        :local interfaceMACAddress ([ /interface get [ /interface find name=$ipAddressInterface ; ] mac-address ]);
        if ([:tostr ($interfaceMACAddress)] != "") do={ 
            :set ($ipAddressArray->$ipAddressIndexArray) {$ipAddressInterface;$interfaceHost;$interfaceMACAddress;$ipAddressIP;$ipAddressComment};
            #:put ($ipAddressArray->$ipAddressIndexArray);
            :set ipAddressIndexArray ($ipAddressIndexArray + 1);
        }
    } on-error={ :set troubleCode 3; } 
}
:set ipAddressIndexArray ($ipAddressIndexArray - 1);

# ip arp list
:global ipArpIndexArray 0;
:global ipArpArray {"";"";"";"";""}; 
foreach ipArp in=([ /ip arp find; ]) do={
    :do {
        :local ipArpInterface ([ /ip arp get $ipArp interface; ]); 
        :local ipArpIP ([ /ip arp get $ipArp address; ]); 
        :local ipArpComment ([ /ip arp get $ipArp comment; ]); 
        :local ipArpMACAddress ([ /ip arp get $ipArp mac-address; ]);
        :set ($ipArpArray->$ipArpIndexArray) {$ipArpInterface;"ARP";$ipArpMACAddress;$ipArpIP;$ipArpComment};
        #:put ($ipArpArray->$ipArpIndexArray);
        :set ipArpIndexArray ($ipArpIndexArray + 1);
    } on-error={ :set troubleCode 4; } 
}
:set ipArpIndexArray ($ipArpIndexArray - 1);

# ip dhcp list
:global ipDhcpIndexArray 0;
:global ipDhcpArray {"";"";"";"";""}; 
foreach ipDhcp in=([ /ip dhcp-server lease find; ]) do={
    :do {
        :local ipDhcpName ([ /ip dhcp-server lease get $ipDhcp host-name; ]); 
        :local ipDhcpIP ([ /ip dhcp-server lease get $ipDhcp address; ]); 
        :local ipDhcpComment ([ /ip dhcp-server lease get $ipDhcp comment; ]); 
        :local ipDhcpMAC ([ /ip dhcp-server lease get $ipDhcp mac-address; ]);
        :set ($ipDhcpArray->$ipDhcpIndexArray) {"DHCP";$ipDhcpName;$ipDhcpMAC;$ipDhcpIP;$ipDhcpComment};
        #:put ($ipDhcpArray->$ipDhcpIndexArray);
        :set ipDhcpIndexArray ($ipDhcpIndexArray + 1);
    } on-error={ :set troubleCode 5; } 
}
:set ipDhcpIndexArray ($ipDhcpIndexArray - 1);
    
# ip route list
:global ipRoutesIndexArray 0;
:global ipRoutesArray {"";"";"";"";""}; 
foreach ipRoutes in=([ /ip route find active=yes distance=0;]) do={
    :do {
        :local ipRouteName ([ /ip route get $ipRoutes gateway; ]); 
        :local ipRouteIP ([ /ip route get $ipRoutes pref-src; ]); 
        :local ipRouteComment ([ /ip route get $ipRoutes comment; ]); 
        :local ipRouteDstAddr ([ /ip route get $ipRoutes dst-address; ]);
        :set ipRouteDstAddr ([:pick $ipRouteDstAddr 0 [:find $ipRouteDstAddr "/"]]);
        :set ($ipRoutesArray->$ipRoutesIndexArray) {$ipRouteName;"ROUTE";$ipRouteDstAddr;$ipRouteIP;$ipRouteComment};
        #:put ($ipRoutesArray->$ipRoutesIndexArray);
        :set ipRoutesIndexArray ($ipRoutesIndexArray + 1);
    } on-error={ :set troubleCode 6; } 
}
:set ipRoutesIndexArray ($ipRoutesIndexArray - 1);

# build new list
:global n 2;
:global newArray {"";"";"";"";"";"";""};
:set ($newArray->0) {"NUMBER";"INTERFACE";"HOST NAME";"MAC ADDRESS";"IP ADDRESS";"BRIDGE";"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->$n) {$n-1;($bridgeHostArray->$j->0);($bridgeHostArray->$j->1);($bridgeHostArray->$j->2);($bridgeHostArray->$j->3);($bridgeHostArray->$j->4);($interfaceArray->$i->4)}; 
            } else={
                :set ($newArray->$n) {$n-1;($bridgeHostArray->$j->0);($bridgeHostArray->$j->1);($bridgeHostArray->$j->2);($bridgeHostArray->$j->3);($bridgeHostArray->$j->4);($bridgeHostArray->$j->5)}; 
            }
            :set n ($n + 1);
        }
    }
    for j from=0 to=$ipRoutesIndexArray do={
        :local findDestination [:find key=($interfaceArray->$i->0) in=($ipRoutesArray->$j->0)];
        if ([:tostr [$findDestination]] != "") do={
            :set ($newArray->$n) {$n-1;($interfaceArray->$i->0);($interfaceArray->$i->1);($interfaceArray->$i->2);($ipRoutesArray->$j->3);($ipRoutesArray->$j->2);($interfaceArray->$i->4)}; 
            :set n ($n + 1);
        }
    }
}
:set n ($n - 1);

if ($troubleCode != 0) do={
    :set errorString ("!!!ATTENTION!!! An error occurred when creating list N".$troubleCode); 
} 

# list output to terminal
for i from=0 to=$n 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 17 ]);
    :set ($newArray->$i->5) ([:pick [:tostr [($newArray->$i->5 . "                         ")]] 0 17 ]);
    :set ($newArray->$i->6) ([:pick [:tostr [($newArray->$i->6 . "                         ")]] 0 25 ]);
    :put ($newArray->$i." ");
}
:put ($errorString);


Замечания, пожелания, улучшения приветствуются.


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

Запустил в домашней сети. Выхлоп:

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

NUMBER ;INTERFACE             ;HOST NAME                 ;MAC ADDRESS         ;IP ADDRESS        ;BRIDGE            ;COMMENT                   
       ;                      ;                          ;                    ;                  ;                  ;                          
1      ;ether1                ;RedmiNote7-Redmi          ;20:34:FB:B7:BC:AF   ;192.168.88.165    ;bridge            ;Semen phone               
2      ;ether1                ;Samsung                   ;28:39:5E:42:EC:8F   ;192.168.88.210    ;bridge            ;TV                        
3      ;ether1                ;RedmiNote8T-Redmi         ;4C:63:71:5A:E8:C9   ;192.168.88.38     ;bridge            ;RedmiNote8T-Redmi         
4      ;ether1                ;hEX_POE                   ;64:D1:54:3C:01:68   ;192.168.88.40     ;bridge            ;                          
5      ;ether1                ;wAP                       ;64:D1:54:FF:57:66   ;192.168.88.50     ;bridge            ;                          
6      ;ether1                ;Papa                      ;D4:3D:7E:E3:09:11   ;192.168.88.250    ;bridge            ;My PC                     
7      ;ether3                ;hEX                       ;64:D1:54:A1:64:E7   ;192.168.88.1      ;bridge            ;mAP                       
8      ;ether3                ;                          ;6C:3B:6B:FA:02:6B   ;192.168.88.100    ;bridge            ;                          
9      ;ether4                ;DESKTOP-LQ57K59           ;00:F1:F3:03:2E:C6   ;192.168.88.203    ;bridge            ;Sava                      
10     ;ether4                ;hEX                       ;64:D1:54:A1:64:E8   ;192.168.88.1      ;bridge            ;Sava comp                 
11     ;ether5                ;hEX                       ;64:D1:54:A1:64:E9   ;10.201.7.18       ;10.201.7.0        ;WAN                       
12     ;bridge                ;hEX                       ;64:D1:54:A1:64:E5   ;192.168.88.1      ;192.168.88.0      ;                          
13     ;loopback              ;hEX                       ;62:D7:B9:1F:F2:EB   ;10.255.255.1      ;10.255.255.1      ;                          
14     ;ovpn-out-1195-DO      ;hEX                       ;02:0E:38:68:2C:51   ;10.12.0.2         ;10.12.0.1         ;No activity dublicat cana 
15     ;ovpn-out-DO           ;hEX                       ;02:0E:38:68:2C:51   ;10.9.0.2          ;10.9.0.1          ;General canal to Europa   
16     ;sstp-client-mic       ;hEX                       ;                    ;10.10.10.1        ;10.10.10.2        ;To Papa flat tunnel       
!!!ATTENTION!!! An error occurred when creating list N2
Два интересных момента.
1. Что такое !!!ATTENTION!!! An error occurred when creating list N2 ?
2. И зачем точка с запятой везде в выводе присутствует?


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