Есть ли возможный метод для реализации traceroute на Android с использованием функции Ping? - PullRequest
1 голос
/ 22 февраля 2020

Я сейчас разрабатываю Android приложение для диагностики сети (в Java) с моими друзьями.

Мы реализовали функцию Ping и теперь хотим реализовать функцию traceroute с помощью Ping, это то, что произошло в Windows cmd: Tracert в Windows

Затем я попытался смоделировать процесс traceroute с помощью непрерывного Ping: Имитировать traceroute с помощью непрерывного Ping

Чтобы объяснить это, я пытаюсь смоделировать процесс traceroute с помощью непрерывного Ping с той же целью IP. Каждый раз, когда я увеличиваю ttl на 1, пока не достигну цели IP: Код в Android studio , записываю IP-адрес промежуточного маршрутизатора и затем распечатываю.

Однако на Android, я обнаружил, что ICMP, возвращенный из промежуточного соединения, не содержит информацию об их IP-адресе: Вывод в android studio .

Что-то не так с командой Ping на Android или, возможно, проблема в формате ICMP? Как я могу получить IP-адрес промежуточного шлюза? Можно ли реализовать traceroute с помощью Ping на Android? Буду признателен за любые предложения.

Это часть Ping нашей очень примитивной версии:

    public String ping(String url) {
    String str = "";

    String tmp="";
    try {
        Process process = Runtime.getRuntime().exec(
                "ping -c 1 -t 1 " + url);
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                process.getInputStream()));
        int i;
        char[] buffer = new char[4096];
        StringBuffer output = new StringBuffer();
        while ((i = reader.read(buffer)) > 0) {
            output.append(buffer, 0, i);
            tmp=reader.readLine();
            System.out.println(tmp);

        }
        reader.close();

        // body.append(output.toString()+"\n");
        str = output.toString();
        // Log.d(TAG, str);
    } catch (IOException e) {
        // body.append("Error\n");
        e.printStackTrace();
    }
    return str;
}
...