2011-05-11 9 views
5

Ho compilato jNetPcap come libreria condivisa per Android. Ho creato una semplice applicazione utilizzando questo codice: http://jnetpcap.com/examples/classic per testare l'API.jNetPcap su Android: problema con il metodo findAllDevs!

Il problema è che quando chiamo le findAllDevs metodo e viene sollevata un'eccezione con questo messaggio: "Impossibile leggere l'elenco dei dispositivi, errore issocket: Permesso negato"

non riesco a capire il motivo, dal momento che ho fatto una chiamata nella prima parte del mio programma in modo da ottenere i permessi di root per la mia applicazione e testare la mia applicazione su un telefono rooted. Quando eseguo l'applicazione, viene visualizzato un pop-up con questo messaggio: "SnifferApp ha ottenuto le autorizzazioni Superuser" e quindi si verifica l'eccezione.

Qualche idea?

Ecco un pezzo del mio codice:

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

Ciao, ho lo stesso problema con la mia applicazione. Sono stato in grado di installare jnetpcap, ma quando si esegue la funzione 'findAllDevs' ricevo una lista vuota, senza errori in errbuf ... Mi chiedevo se hai risolto il problema? Sto già eseguendo l'applicazione come root: $ sudo -i -> root # eclipse -> avvia l'AVD in eclissi – wasp256

+0

Non l'ho risolto affatto. Infine, ho usato il codice nativo per eseguire i miei esperimenti .. Se trovo qualcosa ti farò sapere. –

+0

Thanasis Petsas Ho lo stesso problema. Ho soddisfatto correttamente la libreria JnetPcap con Android NDK, ma quando eseguo questo classico esempio dal sito Web ufficiale di JnetPcap, alldevs.size() restituisce 0. L'hai risolto ??? –

risposta

0

Per quanto ho capito, si sta creando un nuovo processo e ottenere il permesso di superutente, ma la vostra applicazione non li hanno.

Prova ad aggiungere questa autorizzazione nel file manifest:

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

come immagino findAllDevs sta per aprire i dispositivi di rete al telefono.

+0

Sì, facendo ciò il valore di Pcap.NOT_OK è falso :), ma il codice raggiunge di nuovo il blocco if, a causa del fatto che il alldevs.isEmpty() è vero .. E ora l'errbuf non contiene nulla .. Ho provato ad aggiungere ulteriori permessi nel file manifest: \t \t \t

+0

ma non è successo nulla .. –

+0

È perché la tua app non è in esecuzione come root. Forse quello che puoi fare è creare due app. La tua normale applicazione che usa pcap e un "launcher" che avvia la tua app normale come root. Qualcosa come "su -c ". può essere uno script che utilizza __am start ...__ per avviare l'applicazione. È solo un'idea, buona fortuna. –

Problemi correlati