Как проверить, доступна ли удаленная система

Я хочу проверить, доступна ли удаленная система с помощью Java или другими словами "отправить пинг" с помощью Java. Эта функциональность должна быть инкапсулирована в метод с логическим значением, например

public boolean isReachable(String ip) {
   // what to do :-)
}

Я тестировал класс Java Process, но я не думаю, что это лучший способ сделать это из-за сложной обработки вывода с помощью OutputBuffers.

Process proc = Runtime.getRuntime().exec("ping " + ip);

Другой возможностью было бы создание соединения Socket и обработки исключенных исключений, но если удаленная система является "голой" системой unix, на другой стороне может отсутствовать Socket:-) Кроме того, я хотел бы иметь возможность для установки таймаута, когда удаленная система недоступна.

Итак, как я мог это сделать? Спасибо!

Ответы

Ответ 1

InetAddress.getByName(ip).isReachable(timeout);

Ответ 2

InetAddress.getByName(host).isReachable(timeOut) (см. здесь)

Ответ 3

Похоже, вы используете Linux, поэтому вы, вероятно, обнаружите, что isReachable() ненадежна (потому что у вас не будет разрешений на отправку ICMP-пакетов, а очень мало серверов работает с Echo-сервисом).

Если это так, я думаю, вам нужно будет использовать spawn Process так, как вы предлагаете, но я рекомендую использовать команду, например:

   ping -c 1 hostname

Это прекратится после одной попытки, и вы сможете проверить состояние выхода процесса - гораздо надежнее, чем разбор стандартного вывода.

Ping возвращает 0 для успеха, отличного от нуля при неудаче.

Ответ 4

Я знаю, что этот вопрос нашел свой ответ, но я хотел бы добавить свой код только для "copy-paste".

public boolean isIpReachable(String ip, int timeout){
    boolean state = false;

    try {
        state = InetAddress.getByName(ip).isReachable(timeout);
    } catch (IOException e) {
        //Parse error here
    }

    return state;
}