jNetPcap на Android: проблема с методом findAllDevs! - PullRequest
5 голосов
/ 11 мая 2011

Я успешно скомпилировал jNetPcap в качестве разделяемой библиотеки для Android. Я сделал простое приложение, используя этот код: http://jnetpcap.com/examples/classic для тестирования API.

Проблема в том, что когда я вызываю метод findAllDevs, возникает исключение с этим сообщением: «Не удается прочитать список устройств, ошибка issocket: Разрешение отклонено»

Я не могу понять причину, так как я сделал вызов в первой части моей программы, чтобы получить права root для своего приложения, и я тестирую свое приложение на рутированном телефоне. Когда я запускаю приложение, появляется всплывающее окно с таким сообщением: «SnifferApp предоставлены разрешения суперпользователя», а затем возникает исключение.

Есть идеи?

Вот кусок моего кода:

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; 
 }

1 Ответ

0 голосов
/ 11 мая 2011

Насколько я понимаю, вы создаете новый процесс и получаете разрешения суперпользователя, но ваше приложение не имеет их.

Попробуйте добавить это разрешение в свой файл манифеста:

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

Как я полагаю, findAllDevs откроет сетевые устройства на телефоне.

...