Способ подсчета времени прохождения туда-обратно в Java с IP-адресом, кроме команды ping

Я реализовал способ получить RTT в Java на системах Unix с помощью следующего кода:

String command[] = {"ping", "-c4", theIPAddress};
ProcessBuilder pb = new ProcessBuilder(command);
pb.redirectErrorStream(true);
Process p = pb.start();
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while((line = in.readLine()) != null)
   //the terminal output with the ping results...
etc...

Это работает нормально, и я могу рассчитать RTT (задержка) в мс с выходным. Однако, если хост заблокировал ICMP, время пинга истечет. (Даже в Mac OS X Terminal или Windows CMD.)

Теперь я хочу найти альтернативный способ как-нибудь получить RTT/ задержку для IP-адреса. (Я не хочу устанавливать программное обеспечение на стороне хоста.) Если вы не можете предоставить мне пример Java, пожалуйста, дайте мне другой ввод. Я могу переводить между многими языками, и я действительно могу использовать Google.

2 ответа

Решение

Tracert это сокращение от treaceroute (и это команда windows, которую я проверял в последний раз), то есть просто ping пути - он также использует ICMP.

На Linux эквивалентная команда tracepath и в Unix-подобных операционных системах traceroute Утилита по умолчанию использует дейтаграммы протокола пользовательских дейтаграмм (UDP) с номерами портов назначения от 33434 до 33534. Утилита traceroute обычно имеет option вместо этого указать использование эхо-запроса ICMP (тип 8), как в Windows tracert полезность.

Существуют также реализации traceroute, которые используют TCP-пакеты, такие как tcptraceroute или же layer four traceroute,

Источник: traceroute

Если хост заблокировал ICMP, он не хочет, чтобы вы это делали. Попробуйте вместо этого tracert?

Другие вопросы по тегам