電子書籍の厳選無料作品が豊富!

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すべてで共通に動かしたい

A 回答 (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();
で戻ってきた内容を見ています.

よろしくお願いします
    • good
    • 0

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で応答のなかった場合です。

この回答への補足

ありがとうございます。
お返事が遅れてごめんなさい。

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

補足日時:2002/04/10 08:16
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!