Wykrywanie interfejsów zarządzających iLO w sieciach

Zalecam posiadanie dedykowanej sieci, w odrębnym VLAN-ie zarządzającycm, do adresowania serwerów iLO, jednak, gdy ktoś ma pomieszane adresy wewnętrznych systemów i iLO, może mieć problem ze znalezieniem ich wszystkich, jeżeli ma słabą inwentaryzację. Mój skrypt pomoże znaleźć każde działające w sieci iLO i pomoże wszystkim, którzy mają iLO rozrzucone po sieciach produkcyjnych. A także tym, którzy posiadają dedykowane sieci, ale chcą otrzymać listę aktywnych interfejsów zarządzających.

Skrypt wymaga do działania aplikacji ipcalc oraz prips, o ile ipcalc jest do zainstalowania z repozytorium, albo po prostu jest dostępny w systemie, o tyle prips jest dostępny w mało której dystrybucji, dlatego polecam go skompilować, odpisałem to tutaj, zajmie to chwilę, a korzyści mogą być wymierne.

 #!/bin/bash
AffectedNetworks="10.1.192.0/24 10.1.197.0/24 10.2.192.0/24 10.2.197.0/24";
AffectedNetworks="10.1.197.0/24";
for AffectedNetwork in ${AffectedNetworks}; do
{
        ExcludedBroadcast=$(ipcalc ${AffectedNetwork} --broadcast | awk -F'=' '{print $2}');
        ExcludedNetwork=$(ipcalc ${AffectedNetwork} --network | awk -F'=' '{print $2}');
#Gdy brama jest pierwszym adresem po adresie sieci
        ExcludedGateway=$(ipcalc ${AffectedNetwork} --network | awk -F'=' '{print $2}' | awk -F'.' '{print $1"."$2"."$3"."$4+1}');
#Gdy brama jest ostatnim adresem przed adresem rozgloszeniowym
#       ExcludedGateway=$(ipcalc ${AffectedNetwork} --broadcast | awk -F'=' '{print $2}' | awk -F'.' '{print $1"."$2"."$3"."$4-1}');
        ListOfIPs=$(/usr/local/bin/prips ${AffectedNetwork} | grep -Ev "${ExcludedBroadcast}$|${ExcludedNetwork}$|${ExcludedGateway}$");

        for IPAddress in ${ListOfIPs}; do {
#               curl -k -s "${IPAddress}/xmldata?item=All" | grep 'iLO 4' >> CollectedData.txt;
                Response=$(curl --connect-timeout 1 -k -s "${IPAddress}/xmldata?item=CpqKey");
                if [ $(echo ${Response} | grep PROLIANTKEY -c) -gt 0 ]; then {
                        echo "<MGMTADDR>${IPAddress}</MGMTADDR>" >> CollectedData.txt;
                        echo ${Response} | grep -Eo "<SBSN>(.*)</SBSN>" >> CollectedData.txt;
                        echo ${Response} | grep -Eo "<LNAME>(.*)</LNAME>" >> CollectedData.txt;
                } fi
        } done
} done