본문 바로가기
HW Knowledge/Hewlett-Packard Enterprise

iLO - How to find all the iLO IP address on my network

by 스쳐가는인연 2012. 2. 11.

HP 장비를 운용할 때, 원격 관리를 도와주는 강력한 기능으로 iLO가 있다.
이 iLO의 IP가 고정이 아닌 경우 변경이 될 수 있는데, 이 변경된 정보를 수집하는 방법

특히 ILO는 스크립트를 통해 같은 네트웍에 있는 iLO (version 1 과 2) IP를 모두 확인할 수 있다.

그리고 ILO 기본 포트 17988 를 사용하는데 만약 기본포트를 사용하지 않는 경우 스크립트를 변경해야 한다.
또한 tr, sed, expr, curl and nmap 이 반드시 설치되어 있어야 한다.

findilos Script Source Code (download here: findilos.tar)

findilos.tar

#!/bin/bash
#
# findilos - Search a local network segment for iLOs
#            The iLO is the Integrated Lights-Out management processor
#            used on HP ProLiant and BladeSystem servers
#
scriptversion="1.0"
#
# Author: i...@nachotech.com
#
# Website: http://blog.nachotech.com
#
# Requires: tr sed expr curl nmap
#
# Tested with: Nmap 4.20, curl 7.17.1, RHEL4
#
# Note: Discovery of an iLO is dependent upon the Virtual Media port
#       being set to the default of 17988.  If this has been changed
#       by the iLO administrator, then this script will NOT find it.
#
#       Also, if the iLO XML Reply Data Return has been Disabled by
#       the iLO administrator, this script will not be able to
#       gather any information about the server.  It will still be
#       discovered, but all you will see is its IP address.
#


# GLOBAL VARIABLES   scriptname="findilos" iloips="/tmp/tmpilos.$$" iloxml="/tmp/tmpiloxml.$$" ilohwvers="/tmp/tmpilohwvers.$$"   declare -i ilosfound=0   # FUNCTIONS   function parseiloxml { fgrep "$1" $iloxml > /dev/null 2>&1 if [ $? -ne 0 ] then # tag not found in xml output, return empty string parsedstring="N/A" else # tag was found - now we parse it from the output tempstring=$( cat $iloxml | tr -d -c [:print:] | sed "s/^.*<$1>//" | sed "s/<.$1.*//") # trim off leading and trailing whitespace parsedstring=`expr match "$tempstring" '[ \t]*\(.*[^ \t]\)[ \t]*$'` fi }   function is_installed { which $1 > /dev/null 2>&1 if [ $? -ne 0 ] then printf "\nERROR: %s not installed.\n\n" $1 exit 255 fi }   # MAIN   # check for tools that we depend upon   is_installed tr is_installed sed is_installed expr is_installed curl is_installed nmap   # check syntax - should have 1 and only 1 parameter on cmdline   if [ $# -ne 1 ]; then printf "%s %s ( http://blog.nachotech.com/ )\n" $scriptname $scriptversion printf "Usage: %s {target network specification}\n" $scriptname printf "TARGET NETWORK SPECIFICATION:\n" printf " Can pass hostnames, IP addresses, networks, etc.\n" printf " Ex: server1.company.com, company.com/24, 192.168.0.1/16, 10.0.0-255.1-254\n" printf "EXAMPLE:\n" printf " %s 16.32.64.0/22\n" $scriptname exit 255 fi   iprange=$1   # prepare lookup file for iLO hardware versions   cat > $ilohwvers << EOF iLO-1 shows hw version ASIC: 2 iLO-2 shows hw version ASIC: 7 i-iLO shows hw version T0 EOF   # # scan a range of IP addresses looking for an # open tcp port 17988 (the iLO virtual media port) #   printf "Scanning..."   nmap -n -P0 -sS -p 17988 -oG - $iprange | fgrep /open/ | awk '{print $2}' > $iloips   printf "\n\n"   # # open and read the list of IP addresses one at a time #   exec 3< $iloips   echo "--------------- ------ -------- ------------ -------------------------" echo "iLO IP Address iLO HW iLO FW Server S/N Server Model" echo "--------------- ------ -------- ------------ -------------------------"   while read iloip <&3 ; do ilosfound=$ilosfound+1 # # attempt to read the xmldata from iLO, no password required # curl --proxy "" --fail --silent --max-time 3 http://$iloip/xmldata?item=All > $iloxml   # # parse out the Server model (server product name) # from the XML output #   parseiloxml SPN; servermodel=$parsedstring parseiloxml SBSN; sernum=$parsedstring parseiloxml PN; ilotype=$parsedstring parseiloxml FWRI; ilofirmware=$parsedstring parseiloxml HWRI; ilohardware=$parsedstring   ilohwver=$(grep "$ilohardware" $ilohwvers|awk '{print $1}') if [ "$ilohwver" == "" ]; then ilohwver="N/A" fi   if [ "$sernum" == "" ]; then sernum="N/A" fi   printf "%-15s %-6s %-8s %-12s %s\n" $iloip "$ilohwver" "$ilofirmware" "$sernum" "$servermodel"   done   printf "\n%d iLOs found on network target %s.\n\n" $ilosfound $iprange   rm -f $iloips $iloxml $ilohwvers   exit 0

아래 예처럼 firmware version 과 server hardware type을 포함하고 있다.

# findilos 10.10.11.0/24
Scanning...
 
--------------- ------ -------- ------------ -------------------------
iLO IP Address  iLO HW iLO FW   Server S/N   Server Model
--------------- ------ -------- ------------ -------------------------
10.10.11.1      iLO-2  1.29     UTR21402MP   ProLiant BL460c G1
10.10.11.6      iLO-2  1.70     2UY24106BX   ProLiant BL460c G1
10.10.11.8      iLO-2  1.70     2UY24106BT   ProLiant BL460c G1
10.10.11.9      iLO-2  1.70     2UY25201R5   ProLiant BL460c G1
10.10.11.13     iLO-2  1.60     2UY24106BJ   ProLiant BL460c G1
10.10.11.15     iLO-2  1.70     2UY25201RE   ProLiant BL460c G1
10.10.11.27     iLO-2  1.70     T01BPT917B   ProLiant BL460c G1
 
7 iLOs found on network target 10.10.11.0/24.

출처 및 참고.
http://blog.nachotech.com/?p=63
http://cafe.daum.net/redhat/COsR/94?docid=1HjQ8%7CCOsR%7C94%7C20110324093438&q=ilo

반응형