• 締切済み

Javaでping

Javaプログラムで、ネットワーク上に同じIPアドレスが 存在していないかを確認したいとおもっています。 JavaではICMPレベルについてサポートしていないとのことで、 ネイティブのコマンドを利用しようと思い、以下のようにソースを書いてみました。  try  {   // xxx.xxx.xxx.xxxはあるかどうか調べたいIPアドレス   Process proc = Runtime.getRuntime().exec("ping xxx.xxx.xxx.xxx");   proc.waitFor();   int value = proc.exitValue();   if(value == 0)   {    //正常   }   else   {    //異常終了   }  }  cache(Exception e){} IPアドレスが存在するときはproc.exitValue()の戻り値が0で、 存在しないときには0以外かと思ったのですが、 どうやらIPアドレスが存在はしていても、pingコマンドが正常に終了さえすれば 0が返ってきてしまうようです。 そこで戻りを一行ずつ読みこんで解析しようかとおもったのですが…、 どの文字が含まれていればネットワーク上に IPアドレスxxx.xxx.xxx.xxxが含まれているかを判断できるのかがわかりません。 どのWindows上でも、IPアドレスの存在を確かめるには、どうしたらよいのでしょうか? JavaというよりはWindows?の問題?かとおもったのですが、 Windows上でDOSから実行する分には、 人間が目視して確かめればいいだけだとおもうので、 プログラムが使用する場合にもつかえるpingコマンドを知りたいのです。 よろしくおねがいします。 使用JVM SDK1.3.1_02 使用OS Windows95,Windows98,Windows2000,WindowsMeすべてで共通に動かしたい

みんなの回答

  • bugery
  • ベストアンサー率0% (0/0)
回答No.2

最近,javaからpingを投げることに頭を抱えてます. この質問ってもう完了してしまったのでしょうか. もし,情報ありましたらお願いいたします. ちなみに僕の場合は Process proc = Runtime.getRuntime().exec("ping xxx.xxx.xxx.xxx"); proc.waitFor(); ←ここで応答が来ません Process proc = Runtime.getRuntime().exec("ping xxx.xxx.xxx.xxx > ping.log"); の場合は「Bad Parameter」とのメッセージが戻ってきています. BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream())); br.readLine(); で戻ってきた内容を見ています. よろしくお願いします

  • madman
  • ベストアンサー率24% (612/2465)
回答No.1

PINGで応答がある場合。 C:\>ping 127.0.0.1 Pinging 127.0.0.1 with 32 bytes of data: Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 Ping statistics for 127.0.0.1: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms C:\> 応答がない場合。 C:\>ping 1.1.1.1 Pinging 1.1.1.1 with 32 bytes of data: Request timed out. Request timed out. Request timed out. Request timed out. Ping statistics for 1.1.1.1: Packets: Sent = 4, Received = 0, Lost = 4 (100% loss), となります。 Runtime.getRuntime().exec("ping xxx.xxx.xxx.xxx > /tmp/ping.log"); 等と記述して、ファイルの内容を見てはいかがですか。 Request timed uot.がpingで応答のなかった場合です。

mojira
質問者

補足

ありがとうございます。 お返事が遅れてごめんなさい。 えっと…。Request timed out.は Windowsシステムすべてで共通といいきっていのでしょうか? 結果によって次の処理に自動的にふりわけたいのですが、 Request timed uot をキーワードにすると、 ping 255.255.255.255とかのときには適応できないですよね…

関連するQ&A

専門家に質問してみよう