Реализация ICMP Ping на Java под Linux

Понадобилось автоматически пинговать большое количество устройств программой на Java SE. Решение нашлось быстро, но оно не работало под Windows. Так как требовалось реализовать этот функционал и под Windows тоже, пришлось воспользоваться сторонней библиотекой. Собственно, оба решения (на своих платформах) работают прекрасно, но сложилась парадоксальная ситуация. Библиотека от Verax позволяет пинговать параллельно несколько адресов и, что самое главное, может делать это асинхронно. Под Linux приходится использовать isReachable, который пингует один адрес синхронно. Linux рассматривается как основная платформа (но при этом использует менее производительное решение для ICMP).

В связи с этим вопрос: возможно кто-то знает JNI-библиотеку для ICMP Ping (если там будет еще и traceroute, под root-овые права разумеется, будет вообще замечательно), работающую под Linux? Главный критерий — возможность выполнения параллельных асинхронных ping-ов. Решения следующего типа не интересны.
  • Вопрос задан
  • 6061 просмотр
Пригласить эксперта
Ответы на вопрос 3
Losted
@Losted
Software Architect
Про JNI, к сожалению, не знаю.

А почему не подходит какая-нибудь кастомная обертка над isReachable (и потенциально даже над либой от Verax для совместимости), которая его «обасинхронит» и даст возможность пинговать любое количество хостов?

С точки зрения наивной реализации это может быть как-то так:
private ExecutorService executor;
public Map<InetAddress, Future<Boolean>> pingHosts(List<InetAddress> addrs) {
    Map<InetAddress, Future<Boolean>> results = new HashMap<>();
    for (final InetAddress addr : addrs) {
        Future<Boolean> pingResult = executor.submit(new Callable<Boolean>() {
            @Override
            public Boolean call() throws Exception {
                return addr.isReachable(10000);
            }
        });
        results.put(addr, pingResult);
    }
    return results;
}
Ответ написан
@xave
удалено
Ответ написан
Комментировать
tonyvelichko
@tonyvelichko
Есть враппер для PCAP тыц.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы