ネットワーク上にあるhpサーバのiLO IPアドレスとライセンスを収集するスクリプト


2019/01/09 追記

オリジナルのNachoTech Blogがアクセスできなくなっていたので、「https://github.com/osakanataro/findilos」にオリジナルと後述の改変版をアップロードした。


hpサーバをリモートから制御するために使用するiLO。
稼働させたあとにIPアドレスを確認するのがめんどくさい。
そういう場合に、総当たりでiLOのIPアドレスを確認するスクリプトがあった。

NachoTech Blogの「How to find all the iLO’s on your network」にあるfindilosである。

早速ダウンロードして実行してみる。

[root@adserver ~]# ./findilos 172.17.17.0/24<br>
Scanning...</p>
<p>--------------- ------ -------- ------------ -------------------------<br>
iLO IP Address  iLO HW iLO FW   Server S/N   Server Model<br>
--------------- ------ -------- ------------ -------------------------<br>
172.17.17.xxx   N/A    1.26     CN71xxxMxx   ProLiant DL360 G7</p>
<p>1 iLOs found on network target 172.17.17.0/24</p>
<p>[root@adserver ~]#

iLO HWのモデル名は拾ってくれない。
blogのコメントを確認していくと、元のスクリプトはiLO-2までしか対応しておらず、その後のバージョンについてはコメント欄にある修正を実施すれば良いようだ。

また、iLO Advanceを買っている場合に、そのライセンスコードを表示するための案も提示されていた。
ただ、スクリプト例は汚い実装となっていて、せっかくの元スクリプトを活かしていない形だったので、元スクリプトの実装に従ってライセンスを表示するバージョンを作成した。

その実行例がこちら

[root@adserver ~]# ./findilos 172.17.17.0/24<br>
Scanning...</p>
<p>--------------- ------ -------- ------------ ------------------------- -------------------- -----------------------------<br>
iLO IP Address  iLO HW iLO FW   Server S/N   Server Model              iLO Edition          iLO Licence Key<br>
--------------- ------ -------- ------------ ------------------------- -------------------- -----------------------------<br>
172.17.17.xxx   iLO-3  1.26     CN71xxxMxx   ProLiant DL360 G7         iLO 3 Advanced       xxxxx-xxxxx-xxxxx-xxxxxx-xxxxx</p>
<p>1 iLOs found on network target 172.17.17.0/24</p>
<p>[root@adserver ~]#

スクリプトの修正例は以下

#!/bin/bash<br>
#<br>
# findilos - Search a local network segment for iLOs<br>
#            The iLO is the Integrated Lights-Out management processor<br>
#            used on HP ProLiant and BladeSystem servers<br>
#<br>
scriptversion="1.0"<br>
#<br>
# Author: iggy@nachotech.com<br>
#<br>
# Website: http://blog.nachotech.com<br>
#<br>
# Requires: tr sed expr curl nmap<br>
#<br>
# Tested with: Nmap 4.20, curl 7.17.1, RHEL4<br>
#<br>
# Note: Discovery of an iLO is dependent upon the Virtual Media port<br>
#       being set to the default of 17988.  If this has been changed<br>
#       by the iLO administrator, then this script will NOT find it.<br>
#<br>
#       Also, if the iLO XML Reply Data Return has been Disabled by<br>
#       the iLO administrator, this script will not be able to<br>
#       gather any information about the server.  It will still be<br>
#       discovered, but all you will see is its IP address.<br>
#</p>
<p># GLOBAL VARIABLES</p>
<p>scriptname="findilos"<br>
iloips="/tmp/tmpilos.$$"<br>
iloxml="/tmp/tmpiloxml.$$"<br>
ilohwvers="/tmp/tmpilohwvers.$$"</p>
<p>declare -i ilosfound=0</p>
<p># FUNCTIONS</p>
<p>function parseiloxml {<br>
  fgrep "$1" $iloxml &gt; /dev/null 2&gt;&amp;1<br>
  if [ $? -ne 0 ]<br>
  then<br>
    # tag not found in xml output, return empty string<br>
    parsedstring="N/A"<br>
  else<br>
    # tag was found - now we parse it from the output<br>
    tempstring=$( cat $iloxml | tr -d -c [:print:] | sed "s/^.*&lt;$1&gt;//" | sed "s/&lt;.$1.*//")<br>
    # trim off leading and trailing whitespace<br>
    parsedstring=`expr match "$tempstring" '[ \t]*\(.*[^ \t]\)[ \t]*$'`<br>
  fi<br>
}</p>
<p>function is_installed {<br>
  which $1 &gt; /dev/null 2&gt;&amp;1<br>
  if [ $? -ne 0 ]<br>
  then<br>
    printf "\nERROR: %s not installed.\n\n" $1<br>
    exit 255<br>
  fi<br>
}</p>
<p># MAIN</p>
<p># check for tools that we depend upon</p>
<p>is_installed tr<br>
is_installed sed<br>
is_installed expr<br>
is_installed curl<br>
is_installed nmap</p>
<p># check syntax - should have 1 and only 1 parameter on cmdline</p>
<p>if [ $# -ne 1 ]; then<br>
  printf "%s %s ( http://blog.nachotech.com/ )\n" $scriptname $scriptversion<br>
  printf "Usage: %s {target network specification}\n" $scriptname<br>
  printf "TARGET NETWORK SPECIFICATION:\n"<br>
  printf "  Can pass hostnames, IP addresses, networks, etc.\n"<br>
  printf "  Ex: server1.company.com, company.com/24, 192.168.0.1/16, 10.0.0-255.1-254\n"<br>
  printf "EXAMPLE:\n"<br>
  printf "  %s 16.32.64.0/22\n" $scriptname<br>
  exit 255<br>
fi</p>
<p>iprange=$1</p>
<p># prepare lookup file for iLO hardware versions</p>
<p>cat &gt; $ilohwvers &lt;&lt; EOF<br>
iLO-1 shows hw version ASIC:  2<br>
iLO-2 shows hw version ASIC:  7<br>
iLO-3 shows hw version ASIC: 8<br>
iLO-3 shows hw version ASIC: 9<br>
iLO-4 shows hw version ASIC: 12<br>
iLO-4 shows hw version ASIC: 16<br>
i-iLO shows hw version T0<br>
EOF</p>
<p>#<br>
# scan a range of IP addresses looking for an<br>
# open tcp port 17988 (the iLO virtual media port)<br>
#</p>
<p>printf "Scanning..."</p>
<p>nmap -n -P0 -sS -p 17988 -oG - $iprange | fgrep /open/ | awk '{print $2}' &gt; $iloips</p>
<p>printf "\n\n"</p>
<p>#<br>
# open and read the list of IP addresses one at a time<br>
#</p>
<p>exec 3&lt; $iloips</p>
<p>echo "--------------- ------ -------- ------------ ------------------------- -------------------- -----------------------------"<br>
echo "iLO IP Address  iLO HW iLO FW   Server S/N   Server Model              iLO Edition          iLO Licence Key"<br>
echo "--------------- ------ -------- ------------ ------------------------- -------------------- -----------------------------"</p>
<p>while read iloip &lt;&amp;3 ; do<br>
  ilosfound=$ilosfound+1<br>
  #<br>
  # attempt to read the xmldata from iLO, no password required<br>
  #<br>
  curl --proxy "" --fail --silent --max-time 3 http://$iloip/xmldata?item=All &gt; $iloxml</p>
<p>  #<br>
  # parse out the Server model (server product name)<br>
  # from the XML output<br>
  #</p>
<p>  parseiloxml SPN;  servermodel=$parsedstring<br>
  parseiloxml SBSN; sernum=$parsedstring<br>
  parseiloxml PN;   ilotype=$parsedstring<br>
  parseiloxml FWRI; ilofirmware=$parsedstring<br>
  parseiloxml HWRI; ilohardware=$parsedstring</p>
<p>  ilohwver=$(grep "$ilohardware" $ilohwvers|awk '{print $1}')<br>
  if [ "$ilohwver" == "" ]; then<br>
    ilohwver="N/A"<br>
  fi</p>
<p>  if [ "$sernum" == "" ]; then<br>
    sernum="N/A"<br>
  fi</p>
<p>  # add start<br>
  curl --proxy "" --fail --silent --max-time 3 http://$iloip/xmldata?item=CpqKey &gt; $iloxml<br>
  parseiloxml LNAME; ilomodel=$parsedstring<br>
  parseiloxml KEY; ilokey=$parsedstring<br>
  # add end</p>
<p>  printf "%-15s %-6s %-8s %-12s %-25s %-20s %-30s\n" $iloip "$ilohwver" "$ilofirmware" "$sernum" "$servermodel" "$ilomodel" "$ilokey"</p>
<p>done</p>
<p>printf "\n%d iLOs found on network target %s.\n\n" $ilosfound $iprange</p>
<p>rm -f $iloips $iloxml $ilohwvers</p>
<p>exit 0

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください