2011-05-11 19 views
5

Z powodzeniem skompilowałem jNetPcap jako bibliotekę współdzieloną dla systemu Android. Zrobiłem prostą aplikację przy użyciu tego kodu: http://jnetpcap.com/examples/classic, aby przetestować API.jNetPcap na Androida: problem z metodą findAllDevs!

Problem polega na tym, że kiedy wezwać findAllDevs metoda i jest wyjątek z tej wiadomości: „Nie można odczytać listę urządzeń, błędu issocket: Permission denied”

nie mogę zrozumieć powód, ponieważ mam zadzwoniłem w pierwszej części mojego programu, aby uzyskać uprawnienia roota do mojej aplikacji i przetestowałem aplikację na zrootowanym telefonie. Kiedy uruchomię aplikację, pojawi się wyskakujące okienko z tym komunikatem: "SnifferApp uzyskał uprawnienia Superuser", a następnie pojawia się wyjątek.

Wszelkie pomysły?

Oto fragment mojego kodu:

Process p = Runtime.getRuntime().exec("su"); 
/*try { 
    Thread.sleep(10000); 
} catch (InterruptedException e1) { 
    // TODO Auto-generated catch block 
    e1.printStackTrace(); 
} // do nothing for 1000 miliseconds (1 second) 
*/ 
try { 
     System.loadLibrary(JNETPCAP_LIBRARY_NAME); 
} 
catch (UnsatisfiedLinkError e) { 
    System.out.println("Native code library failed to load.\n" + e); 
} 

/*************************************************************************** 
* First get a list of devices on this system 
**************************************************************************/ 
int r = Pcap.findAllDevs(alldevs, errbuf); 
r = Pcap.findAllDevs(alldevs, errbuf); 
if (r == Pcap.NOT_OK || alldevs.isEmpty()) { 
    tv.append("Can't read list of devices, error is" + errbuf 
    .toString()); 
    setContentView(tv); 
    return; 
} 
+0

Witam, mam ten sam problem z moją aplikacją. Mogłem zainstalować jnetpcap, ale po uruchomieniu funkcji findAllDevs otrzymuję pustą listę, brak błędów w errbuf ... Zastanawiałem się, czy rozwiązałeś problem? Używam już aplikacji jako root: $ sudo -i -> root # eclipse -> uruchom AVD w Eclipse – wasp256

+0

Nie rozwiązałem go w ogóle. Na koniec użyłem kodu natywnego do przeprowadzenia moich eksperymentów. Jeśli coś znajdę, dam ci znać. –

+0

Thanasis Petsas Mam ten sam problem. Z powodzeniem zastosowałem bibliotekę JnetPcap w systemie Android NDK, ale kiedy uruchomię ten klasyczny przykład z oficjalnej strony JnetPcap, alldevs.size() zwraca 0. Czy rozwiązałeś? –

Odpowiedz

0

O ile rozumiem, podczas tworzenia nowego procesu i uzyskanie zgody administratora, ale aplikacja nie ma ich.

warto dodać to uprawnienie w pliku manifestu:

<uses-permission android:name="android.permission.INTERNET" /> 

jako Chyba findAllDevs zamierza otworzyć urządzeń sieciowych przez telefon.

+0

Tak, robiąc to wartość Pcap.NOT_OK jest fałszywa :), ale kod sięga ponownie do bloku if z powodu faktu, że alldevs.isEmpty() to prawda .. A teraz errbuf nie zawiera nic .. Próbowałem dodać więcej uprawnień do pliku manifestu: \t \t \t

+0

, ale nic się nie stało .. –

+0

ponieważ twoja aplikacja nie działa jako root. Może to, co możesz zrobić, to stworzyć dwie aplikacje. Twoja normalna aplikacja korzystająca z pcap i "launchera" uruchamiającego zwykłą aplikację jako root. Coś w stylu "su -c ". może być skryptem, który używa __am start ...__ do uruchamiania aplikacji. To tylko pomysł, powodzenia. –