リモートホスト名が必要となる場面は多くないかと想いますが、IPアドレスで接続したり接続時に使用するホスト名と機器に設定しているホスト名が異なる場合を想定すると、自動的にリモートホスト名を取得するメリットを感じる場面もあるかと思います。
目次
ホスト名を得る方法
ホスト名を得る方法としては、リモートホスト上でホスト名を表示するコマンドを実行する事が一番簡単そうですが、接続する機器によってコマンドは異なりますし戻って来た文字列を解析する必要があります。
そこで、通常ネットワーク機器のプロンプトにはホスト名が含まれているという事を考慮して、プロンプトからホスト名を得ることにします。
waitregexを使う
waitregexは正規表現にグループマッチを含めると、システム変数groupmatchstr1~groupmatchstr9にマッチした文字列を格納します。
この機能を使い、リモートホストから1行受信してwaitregexで待ち受ければホスト名だけ切り出す事が出来ます。
実際にホスト名を切り出すことができるサンプルを掲載します。このマクロはCisco、Fortigate、Juniper ScreenOS、CentOSで動く事を確認しています。まだ未確認ですがHPのSWとBIG-IPでも動くと思われます。
call getremotehostname
sprintf '[%s]' remotehostname
messagebox inputstr remotehostname
end
:getremotehostname
; 同期モードに設定
setsync 1
; タイムアウト
timeout = 1
; リモートホスト名
remotehostname = ''
while 1
pause 1
sendln
waitregex '[a-zA-Z0-9]*@([a-zA-Z0-9\-_]*)' '^<?([a-zA-Z0-9\-_]*)'
if result == 0 then
messagebox 'リモートホスト名を取得できない' 'タイムアウト'
return
endif
remotehostname = groupmatchstr1
strlen remotehostname
if result == 0 then
continue
else
break
endif
endwhile
; 同期モード解除
setsync 0
return

コメント