2011-05-11 16 views
5

He compilado con éxito jNetPcap como una biblioteca compartida para Android. He hecho una aplicación simple usando este código: http://jnetpcap.com/examples/classic para probar la API.jNetPcap en Android: ¡problema con el método findAllDevs!

El problema es que cuando llamo a los findAllDevs método y excepción se lanza con este mensaje: "No se puede lista de dispositivos, issocket error de lectura: Permiso denegado"

no puedo entender la razón, ya que tengo hice una llamada en la primera parte de mi programa para obtener permisos de raíz para mi aplicación y probar mi aplicación en un teléfono rooteado. Cuando ejecuto la aplicación, aparece una ventana emergente con este mensaje: "SnifferApp recibió permisos de superusuario" y luego se produce la excepción.

¿Alguna idea?

Aquí está una parte de mi código:

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

Hola, tengo el mismo problema con mi aplicación. Pude instalar jnetpcap pero cuando ejecuto la función 'findAllDevs' recibo una lista vacía, no hay errores en errbuf ... Me preguntaba si ha resuelto el problema. Ya estoy ejecutando la aplicación como root: $ sudo -i -> root # eclipse -> iniciar el AVD en eclipse – wasp256

+0

No lo resolví en absoluto. Finalmente, utilicé el código nativo para ejecutar mis experimentos. Si encuentro algo, te lo haré saber. –

+0

Thanasis Petsas Tengo el mismo problema. He cumplido satisfactoriamente la biblioteca JnetPcap con Android NDK, pero cuando ejecuto este ejemplo clásico desde el sitio web oficial de JnetPcap, alldevs.size() devuelve 0. ¿Lo resolvió ??? –

Respuesta

0

Por lo que yo entiendo, va a crear un nuevo proceso y obtener el permiso de superusuario, pero su aplicación no los tiene.

Trate de añadir este permiso en el archivo de manifiesto:

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

ya que supongo findAllDevs va a abrir los dispositivos de red en el teléfono.

+0

Sí, al hacer esto, el valor de Pcap.NOT_OK es falso :), pero el código vuelve a alcanzar el bloque if debido al hecho de que el alldevs.isEmpty() es verdadero ... Y ahora el errbuf no contiene nada ... Intenté agregar más permisos en el archivo de manifiesto: \t \t \t

+0

pero no pasó nada .. –

+0

Es porque tu aplicación no se ejecuta como root Tal vez lo que puedes hacer es crear dos aplicaciones. Su aplicación normal que usa pcap y un "iniciador" que activa su aplicación normal como raíz. Algo así como "su -c ". puede ser una secuencia de comandos que utiliza __am start ...__ para iniciar su aplicación. Es solo una idea, buena suerte. –

Cuestiones relacionadas