2013-04-04 15 views
5

Po raz pierwszy zadaję każde pytanie, więc wybacz mi mój błąd.Implementacja funkcji Traceroute w Androidzie

Chcę zaimplementować funkcję traceroute, taką jak te aplikacje dostępne w sklepie Android Play.

Visual TracertPro

Traceroute

wiem, że podczas wpisywania w CMD w Windows traceroute google.com wyświetli stosować wszystkie pośredni IP.

Teraz próbowałem.

Próbuję użyć polecenia traceroute, ale Android nie obsługuje traceroute tylko zrootowane urządzenie obsługuje je.

Process process =Runtime.getRuntime().exec("traceroute yahoo.com"); 
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); 
reader.close(); 
Log.d("*************", ""+output); 

Pomyślałem więc, aby osiągnąć za pomocą polecenia ping, ale nie mógł dostać żadnej success.By używając polecenia ping to tylko daje ip google.com nie jak muszę przede aplikacje wyświetlacz.

Process process = Runtime.getRuntime().exec("/system/bin/ping -t 1 -c 1 google.com"); 

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); 
reader.close(); 
Log.d("*************", ""+output); 

Proszę wskazać mi, jak to osiągnąć. Niektóre linki lub samouczek będą bardzo przydatne.

Dziękując z góry.

+4

Dobry pierwszy post! Zawsze sprawia mi to przyjemność, gdy pierwszy post użytkownika ma taką jakość. – amccormack

Odpowiedz

4

Narzędzie busybox zawiera funkcję traceroute. Możesz uruchomić busybox na swoim urządzeniu bez zrootowania telefonu, postępując zgodnie z tym youtube tutorial. Następnie powinieneś być w stanie wykorzystać pierwszy wpisany fragment kodu do wysłania zapytania do traceroute z poziomu swojej aplikacji. Oczywiście, będziesz musiał upewnić się, że używasz poprawnej ścieżki podczas wywoływania traceroute.

+0

Właśnie obejrzałem wideo w tym, że jego urządzenie jest podłączone do komputera i on używa poleceń, ale jeśli chcę zrobić aplikację i chcę, żeby użytkownik nic takiego nie robił, jak mogę to osiągnąć. Jeśli wiesz, możesz podać kod, dzięki czemu mogę go zrozumieć. –

+0

@MusicBlues Możesz włączyć busybox jako zasób w aplikacji, a następnie zainstalować go w imieniu użytkowników. Komentarze nie są najlepszym miejscem do wyjaśnienia tego, więc powinieneś spróbować zadać dodatkowe pytanie. – amccormack

+0

Sprawdź mój nowy link do pytania i pomóż, jeśli to możliwe. http://stackoverflow.com/questions/15827492/how-to-add-busybox-and-implement-traceroute-functionality-in-android –

1

Traceroute działa poprzez wysłanie 3 komunikatów ICMP za pośrednictwem protokołu UDP do mało prawdopodobnego numeru portu, uruchamia timer za każdym razem i ustawia TTL w datagramie na 1 (maksymalnie 1 przeskok). Gdy dojdzie do pierwszego routera, datagram wygasa, a router odmówi wysłania pakietu dalej i odpowie wygasłym komunikatem (ICMP typ 11 kod 0), który zawiera nazwę routera, adres IP, MTU i kilka innych bitów danych. Źródło otrzyma czas podróży w obie strony z timera. Gdy traceroute pobierze dane z pierwszego skoku, powtórzy te kroki, ale zwiększy TTL o jeden i będzie powtarzał te kroki, aż w końcu dotrze do samego hosta.

Aby kod działał, musisz mieć możliwość manipulowania datagramem warstwy sieci i ustawieniem wartości TTL w nagłówku. Po tym jest tylko kwestia analizowania odpowiedzi z każdego routera, który zwraca komunikat wygasły TTL.

Powiązane problemy