Способ подсчета времени прохождения туда-обратно в 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?