Java không có nguyên thủy cho ICMPs và traceroute. Làm thế nào để vượt qua điều này? Về cơ bản tôi đang xây dựng mã nên chạy trong * nix và Windows, và cần một đoạn mã sẽ chạy trên cả hai nền tảng.Làm thế nào để ICMP và traceroutes trong Java
6
A
Trả lời
4
Đây là những gì tôi đã viết ngày hôm nay để "triển khai" lệnh theo dõi tuyến đường trong Java. Tôi đã chỉ được thử nghiệm trong các cửa sổ nhưng nó sẽ làm việc trong Linux cũng mặc dù có một số công cụ traceroute có sẵn cho Linux rất có thể có cần phải có một số kiểm tra cho sự tồn tại của các chương trình.
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
Bạn sẽ cần jpcap library (có lẽ là SourceForge jpcap đang làm việc quá) và sử dụng lớp ICMPPacket để thực hiện các chức năng mong muốn.
Đây là Java traceroute implementation bằng cách sử dụng jpcap library.
Điều kiện phải được thay đổi thành os.toLowerCase(). Contains ("win") – Hassan
nơi bạn đã sử dụng phương thức ** convertStreamToString **? – Omore
@Bạn còn hỏi nơi nó được xác định? Tôi nghĩ rằng đó là một phương pháp tùy chỉnh tôi đã viết. Tôi không có quyền truy cập vào mã nữa nên bạn sẽ phải tìm ra cách để thực hiện nó. Nếu bạn làm như vậy, hãy cập nhật câu trả lời của tôi để bao gồm nó; bạn sẽ nhận được điểm để làm điều đó. –