Как запустить команду PING и получить сводку ping host? - PullRequest
5 голосов
/ 11 января 2012

Привет! Мне нужно выполнить команду PING с использованием кода Java и получить сводную информацию о хосте ping.Как это сделать на Java?

Ответы [ 4 ]

14 голосов
/ 11 января 2012

В качестве указанного viralpatel вы можете использовать Runtime.exec()

Ниже приведен пример этого

class pingTest {

    public static void main(String[] args) {
        String ip = "127.0.0.1";
        String pingResult = "";

        String pingCmd = "ping " + ip;
        try {
            Runtime r = Runtime.getRuntime();
            Process p = r.exec(pingCmd);

            BufferedReader in = new BufferedReader(new
            InputStreamReader(p.getInputStream()));
            String inputLine;
            while ((inputLine = in.readLine()) != null) {
                System.out.println(inputLine);
                pingResult += inputLine;
            }
            in.close();

        } catch (IOException e) {
            System.out.println(e);
        }

    }
}

output

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

см.http://www.velocityreviews.com/forums/t146589-ping-class-java.html

3 голосов
/ 11 октября 2013

InetAddress класс имеет метод, который использует ECMP Echo Request (он же ping) для определения доступности хостов.

String ipAddress = "192.168.1.10";
InetAddress inet = InetAddress.getByName(ipAddress);
boolean reachable = inet.isReachable(5000);

Если указанная выше переменная reachable имеет значение true, то это означает, что хостправильно ответил с помощью ECMP Echo Reply (aka pong) в течение заданного времени (в миллис).

Примечание: Не все реализации должны использовать ping. Документация гласит, что :

Типичная реализация будет использовать ICMP ECHO REQUEST, если привилегия может быть получена, в противном случае она попытается установить TCP-соединение на порту 7 (Echo)хоста назначения.

Поэтому этот метод можно использовать для проверки доступности хостов, но его нельзя универсально использовать для проверки на проверки на основе ping.

1 голос
/ 19 августа 2012

Проверьте эту библиотеку ping для java, которую я делаю:

http://code.google.com/p/jpingy/

Может быть, это может помочь

0 голосов
/ 22 октября 2018

Код ниже будет работать как в Windows, так и в Linux,

public static boolean isReachable(String url) throws MalformedURLException {
        if (!url.contains("http") && !url.contains("https")) {
            url = "http://" + url;
        }
        URL urlObj = new URL(url);
        url = urlObj.getHost();
        url = "ping " + url;
        try {
            Process p = Runtime.getRuntime().exec(url);
            BufferedReader inputStream = new BufferedReader(
                    new InputStreamReader(p.getInputStream()));
            String s = "";
            while ((s = inputStream.readLine()) != null) {
                if (s.contains("Packets: Sent") || s.contains("bytes of data")) {
                    return true;
                }
            }
            return false;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
...