本サイトはプロモーションを含みます。

リモートホストからホスト名を取得する方法

リモートホスト名が必要となる場面は多くないかと想いますが、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

 

コメントを残す

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

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)