Нарисовал на досуге скрипт, выводящий список задействованных интерфейсов роутера и подключенных к ним устройств. Надеюсь пригодится для упрощения ревизии устройств в сети. Особенность скрипта в том, что используется информация от 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
Надо признать, что до запуска скрипта не подозревал о проблемах в сети...
Конструктивная критика и усовершенствования только приветствуются.