Я сейчас разрабатываю 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;
}