#navi(コマンド別) #contents //////////////////////////////////////////////////////////////////////////// *ping の実行結果の場合わけ [#v3dcdb27] 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での判断 [#h590948a] ping の結果は上記の4通りありえる。それぞれの場合について、Win2KとWinXPの ping 実行後の ERRORLEVEL の値を示す。 |状態|判断|Win2K|WinXP| |ホスト名が見つからない|NG|1|1| |応答あり|OK|0|0| |応答なし|NG|0|1| |経路なし|NG|0|0| Win2Kではホスト名からIPアドレスを求めることができなかった時のみ、 ERRORLEVEL が 1 となり、それ以外のケースでは 0 となる。 従って ERRORLEVEL を使って応答ありの判断は出来ない。 WinXPでは応答無しの場合も ERRORLEVEL が 1 となるが、 経路なしの場合も ERRORLEVEL が 0 となるので、 経路なしという可能性がある場合、ERRORLEVELだけでは判断できない。 経路なしの可能性が無い場合、WinXPでは ERRORLEVEL で応答ありを判断できる。 //////////////////////////////////////////////////////////////////////////// *応答メッセージによる判断 [#nf61f4e7] 上記のように、ERRORLEVEL では応答を判断できないので、 出力の文字列から判断する必要がある。 メッセージを見比べて、例えば以下のような方法が考えられる。 ping -n 1 宛先 | find "bytes=32" >NUL IF ERRORLEVEL 1 goto 失敗 //////////////////////////////////////////////////////////////////////////// *ホスト名からIPアドレスを求める [#f7ff6f2d] 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アドレスからホスト名を求める [#d93eb9eb] nslookupを使う方法に比べると、DNSサーバー以外の hosts や lmhosts また Windowsのブロードキャストによって求まる場合もある。~ -a オプションを指定すると、IP アドレス指定の ping でもホスト名が表示される。 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% //////////////////////////////////////////////////////////////////////////// #navi(コマンド別)