В Java нет примитивов для ICMP и traceroute. Как преодолеть это? В основном я создаю код, который должен запускаться в * nix и Windows, и нужен фрагмент кода, который будет работать на обеих платформах.Как ICMPs и traceroutes в Java
6
A
ответ
4
Вот что я написал сегодня, чтобы «реализовать» команду трассировки маршрута в Java. Я тестировал только в Windows, но он также должен работать в Linux, хотя для Linux доступно несколько инструментов traceroute, поэтому, скорее всего, необходимо наличие некоторых проверок наличия этих программ.
public class NetworkDiagnostics{
private final String os = System.getProperty("os.name").toLowerCase();
public String traceRoute(InetAddress address){
String route = "";
try {
Process traceRt;
if(os.contains("win")) traceRt = Runtime.getRuntime().exec("tracert " + address.getHostAddress());
else traceRt = Runtime.getRuntime().exec("traceroute " + address.getHostAddress());
// read the output from the command
route = convertStreamToString(traceRt.getInputStream());
// read any errors from the attempted command
String errors = convertStreamToString(traceRt.getErrorStream());
if(errors != "") LOGGER.error(errors);
}
catch (IOException e) {
LOGGER.error("error while performing trace route command", e);
}
return route;
}
1
Вам нужен jpcap library (возможно, SourceForge jpcap работает тоже) и использовать класс ICMPPacket для реализации требуемой функциональности.
Вот Java traceroute implementation, используя jpcap library.
Условие должно быть изменено на os.toLowerCase(). Contains ("win") – Hassan
где вы использовали ** convertStreamToString ** метод? – Omore
@Omore вы спрашиваете, где это определено? Я думаю, что это специальный метод, который я написал. У меня больше нет доступа к коду, поэтому вам нужно будет выяснить, как его реализовать. Если да, обновите мой ответ, чтобы включить его; вы получите очки за это. –