Sophie
Sophie

Reputation: 1600

Ping with java to multiplatform

I need to perform ping to some ip/machine. The code may be executed on any kind of platform (windows, linux, mac) and i need to get the information about loss and the round trip time. so java's exec of ping is not good enough because then i need to parse ping response as string, which is different per platform and per OS language. so what do i need to do? I know there is something like JNI, but i'm new to java, so need a little help here. it still means i need to have native implementation per platform? Any examples or suggestions?

Upvotes: 7

Views: 3501

Answers (4)

Sophie
Sophie

Reputation: 1600

I have used JNI to get the ping command. I have implemented the ping using native (C) and then wrapped it with JNI. The downgrade is that need to compile the C dll per platform.

Upvotes: 0

CloudyMarble
CloudyMarble

Reputation: 37566

Since java is not platform independent you can ask which OS you have using the System.getProperty("os.name") and parse the response or define the command according to it.

Alternatively you can use isReachable(int timeout) in InetAddress which seems to be the closest implementation to the ICMP ECHO REQUEST, but it will not provide you the information about loss and round trip time.

Another Idea would be to use tracert/tracepath instead of ping to get the round trip? check this thread for some more information.

Upvotes: 5

vbence
vbence

Reputation: 20333

I guess parsing is still your easiest option. I would be suprised if you needed more than this regex:

time[<=]([0-9.]+)[ ]?ms

Enclosed in parentheses you will get the time like 1 or 14 or 1.239 which can be fed to Float.parseFloat().

Upvotes: 0

Ernest Friedman-Hill
Ernest Friedman-Hill

Reputation: 81684

You can't do real ICMP with pure Java. The reasonably portable jpcap library provides a nice Java interface to native libraries, though, including ICMP (ping).

Upvotes: 1

Related Questions