ping の実行結果の場合わけ

ping の結果は以下の4通りありえる。ping -n 1 宛先 の結果を示す(空行略)。

  • ホスト名が見つからない
    Unknown host xxxx. (Win2Kの場合)
    Ping request could not find host xxx. Please check the name and try again. (WinXPの場合)
  • 応答あり
    Pinging 192.168.0.1 with 32 bytes of data:
    Reply from 192.168.0.1: bytes=32 time=1ms TTL=128
    Ping statistics for 192.168.0.1:
        Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
    Approximate round trip times in milli-seconds:
        Minimum = 0ms, Maximum = 0ms, Average = 0ms
  • 応答なし
    Pinging 192.168.0.2 with 32 bytes of data:
    Request timed out.
    Ping statistics for 192.168.0.2:
        Packets: Sent = 1, Received = 0, Lost = 1 (100% loss),
    Approximate round trip times in milli-seconds:
        Minimum = 0ms, Maximum =  0ms, Average =  0ms
  • 経路なし
    Pinging 192.168.100.1 with 32 bytes of data:
    Reply from 192.168.10.1: Destination host unreachable.
    Ping statistics for 192.168.100.1:
        Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
    Approximate round trip times in milli-seconds:
        Minimum = 0ms, Maximum = 0ms, Average = 0ms

「経路なし」は、途中のルーターから「そこから先の経路が無い」旨の応答が返る。

ERRORLEVELでの判断

ping の結果は上記の4通りありえる。それぞれの場合について、Win2KとWinXPの ping 実行後の ERRORLEVEL の値を示す。

状態判断Win2KWinXP
ホスト名が見つからないNG11
応答ありOK00
応答なしNG01
経路なしNG00

Win2Kではホスト名からIPアドレスを求めることができなかった時のみ、 ERRORLEVEL が 1 となり、それ以外のケースでは 0 となる。 従って ERRORLEVEL を使って応答ありの判断は出来ない。

WinXPでは応答無しの場合も ERRORLEVEL が 1 となるが、 経路なしの場合も ERRORLEVEL が 0 となるので、 経路なしという可能性がある場合、ERRORLEVELだけでは判断できない。 経路なしの可能性が無い場合、WinXPでは ERRORLEVEL で応答ありを判断できる。

応答メッセージによる判断

上記のように、ERRORLEVEL では応答を判断できないので、 出力の文字列から判断する必要がある。 メッセージを見比べて、例えば以下のような方法が考えられる。

ping -n 1 宛先 | find "bytes=32" >NUL
IF ERRORLEVEL 1 goto 失敗

ホスト名からIPアドレスを求める

nslookupを使う方法に比べると、DNSサーバー以外の hosts や lmhosts また Windowsのブロードキャストによって求まる場合もある。

set IP=
for /f "tokens=1,3 delims=[] " %%A in ('ping -n 1 %HOST%') do if %%A==Pinging set IP=%%B
if defined IP echo IP address of %HOST% is %IP%

IPアドレスからホスト名を求める

nslookupを使う方法に比べると、DNSサーバー以外の hosts や lmhosts また Windowsのブロードキャストによって求まる場合もある。-a オプションを指定すると、 IP アドレス指定の ping でもホスト名が表示される。

set HOST=
for /f "tokens=1-3" %%A in ('ping -a -n 1 %IP%') do if %%A==Pinging if not %%C==with set HOST=%%B
if defined HOST echo hostname of %IP% is %HOST%


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-03-22 (火) 00:00:34 (7184d)