LAN内からWeb GUIを監視しよう~pingによらない死活監視とパスワードチェック~

自拠点内のヤマハルーターに対して死活監視を行う方法として

  • 監視サーバーからのping監視
  • 監視サーバーからのSNMP監視

が一般的かと思います。また、ルーターのSYSLOG文字列監視をLINEへ通知する手順も公開されています。しかし、以下の条件が重なると充分に監視を行えず、障害に気が付きにくいケースもあるでしょう。

  • セキュリティ上などの理由でICMPを許可していない
  • そもそもWAN回線が切断されていたり、ルーターの電源が供給されていたりしていなければ通知を飛ばすことができない

やや前置きが長くなってしまいましたが、このようなケースの場合、とっさに障害を切り分けるシンプルな方法が求められます。

curlコマンドでルーターの管理画面にアクセスしてみよう

パソコンを操作していて突然インターネットに繋がらなくなった場合、ブラウザでルーターのWeb GUIにアクセスを試みてもよいのですが、何か作業をしながらでは集中力が途切れてしまう、ましてわざわざ席から立ち上がってルーターのランプを確認しに行くのは面倒です。そこで、コマンドラインWEBブラウザ curl を使ってルーターのWeb GUIにアクセスして障害検知を行う方法をご紹介します。

LAN内にLinuxマシンがあるか、Windows10で動くWSL上のLinuxマシンにcurlコマンドをインストールすることで以下の手順を実行可能ですが、Windows10は、2018年のWindows 10 Ver.1803(RS3)からcurl.exeコマンドが標準で付属するようになりました。

Windowsスタートメニューを起動し、cmdと入力してコマンドプロンプトを起動します。コマンドプロンプトが起動したら早速curlコマンドでWeb GUI画面にアクセスしてみましょう。

curl -u USERNAME:PASSWORD http://192.168.100.1/dashboard/

curlコマンドのオプション -u の後にユーザー名とパスワードをコロンで区切って与えます。パスワードに記号を用いている場合は、以下のようにダブルクォーテーションで囲います。

curl -u “USERNAME:P<A>S,SWORD” http://192.168.100.1/dashboard/

上記ユーザー名とパスワード、ルーターのIPアドレスをご自身の環境に読み替えて実行すると、ダッシュボード画面のhtmlソースコードが表示されます。これによって死活確認を行うことも可能ですが、大量のhtmlソースコードを画面上に表示する必要もなく、また、可読性もよろしくないので、httpヘッダのみを表示することで、よりスマートな確認を行うことも可能です。以下コマンドを実行してみましょう。

curl -Is -u USERNAME:PASSWORD http://192.168.100.1/dashboard/

すると、以下のようにヘッダのみが出力されます。

HTTP/1.0 200 OK Date: Thu, 19 Aug 2021 20:44:41 GMT Server: Router Allow: HEAD, GET, POST Content-Type: text/html X-Frame-Options: SAMEORIGIN Cache-control: no-cache

注目すべきは最初の行、httpステータスコードです。httpステータスコードが200であれば、リクエストは正常に受け付けられたということになります。httpステータスコードの一覧はこちらをご参照ください。

curlコマンドでhttpステータスコードのみを取得しよう

curlコマンドのオプションを変更することで、httpステータスコードのみを出力することも可能です。上記ヘッダーのうち、ステータスコードと日時以外は不変である (grep -vしてもよい) ので、grepで絞ってもよいのですが、curlのオプションのみで表示を絞り込むほうがスマートです。それでは早速実行してみましょう。

curl -o /dev/null -w ‘%{http_code}\n’ -s -u USERNAME:PASSWORD http://192.168.100.1/dashboard/

ルーターへ正常にhttp接続が確立し、ユーザー名とパスワードが合致していれば以下のように表示されます。

200

ユーザー名またはパスワードを間違った場合は認証エラーとなりますので、その場合、ステータスコードは401となります。

ルーターへhttp接続ができなかった(ステータスコードが取得できなかった)場合、curlコマンドはステータスコード000を返します。筆者の環境では、名前解決ができないホストに対してステータスコード取得を試みた場合、0~3秒以内に000が返ってくるのですが、ファイアウォールでフィルタリングされていたり、どのインターフェイスにもアサインされていないデタラメなIPアドレスに対してステータスコード取得しようとした場合は、しばらく応答を待ち続けてしまいました(デフォルトでは300秒でタイムアウトします)。タイムアウトを任意の秒数で設けたい場合はcurlコマンドに-mオプションと秒数を引数に与えます。3秒以内に応答がなければエラーとする場合は以下のように実行します。

curl -m 3 -o /dev/null -w ‘%{http_code}\n’ -s -u USERNAME:PASSWORD http://192.168.100.1/dashboard/

もしhttp監視の結果をプログラムに取得させたい場合は、ステータスコードで判別させるとよいでしょう。ステータスコード(出力結果)が200であれば正常終了、401であれば認証エラー、000であれば接続エラー、というように条件分岐させるといったようにです。それではよいネットワーク運用ライフを!


お問い合わせ


購入前の評価機のご依頼、構成のご相談、販売店のご紹介、お見積り依頼、技術支援、営業支援、セミナー開催支援など、
以下よりお気軽にお問い合わせください。
お問い合わせ