2011-05-11 1 views
5

jNetPcap을 Android 용 공유 라이브러리로 성공적으로 컴파일했습니다. 이 코드를 사용하여 간단한 응용 프로그램 (http://jnetpcap.com/examples/classic)을 작성하여 API를 테스트했습니다. 내가 가진 이후안드로이드의 jNetPcap : findAllDevs 메소드의 문제점!

가 나는 이유를 이해할 수 없다 "장치 오류 issocket의 목록을 읽을 수 없습니다 : 사용 권한이 거부"

문제는 그 방법의 findAllDevs를 호출하고 예외가이 메시지가 발생할 때이다 내 프로그램의 첫 부분에서 전화를 걸어 내 응용 프로그램에 대한 루트 권한을 얻었고 응용 프로그램을 루팅 된 전화로 테스트했습니다. 응용 프로그램을 실행하면 "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; 
} 
+0

안녕하세요, 제 신청서와 동일한 문제가 있습니다. jnetpcap을 설치할 수 있었지만 'findAllDevs'함수를 실행할 때 빈 목록을 받으면 errbuf에 오류가 없습니다 ... 문제를 해결했는지 궁금합니다. 나는 이미 root로 applicaiton을 실행하고있다. $ sudo -i -> root # eclipse -> AVD를 Eclipse로 시작한다. – wasp256

+0

나는 그것을 전혀 풀지 않았다. 마지막으로, 내 실험을 실행하기 위해 원시 코드를 사용했습니다. 내가 발견 한 것이 있으면 알려 드리겠습니다. –

+0

Thanasis Petsas 나는 같은 문제가있다. 안드로이드 NDK와 함께 JnetPcap 라이브러리를 성공적으로 준수했지만 공식 JnetPcap 웹 사이트에서이 고전적인 예제를 실행하면 alldevs.size()가 0을 반환합니다. 당신이 그것을 해결 했습니까 ??? –

답변

0

지금까지 내가 이해, 당신은 새로운 프로세스를 생성하고 수퍼 유저 권한을 얻고 있지만, 앱을 가지고 있지 않습니다. 매니페스트 파일에이 권한을 추가

시도 :

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

내가 findAllDevs 전화에 네트워크 장치를 열 것입니다 생각으로

.

+0

예, Pcap.NOT_OK의 값은 false입니다. :) 그러나 코드는 if 블록에 다시 도달합니다. alldevs.isEmpty()가 true입니다 .. 이제 errbuf에 아무것도 포함되어 있지 않습니다. 매니페스트 파일에 더 많은 권한을 추가하려고했습니다 : \t <용도 - 허가 로이드 이름 = "android.permission.ACCESS_NETWORK_STATE"/> \t <사용 불허 로이드 이름 = "android.permission.ACCESS_WIFI_STATE"/> \t <사용 불허 로이드 이름 = "android.permission .ACCESS_COARSE_LOCATION/"> –

+0

하지만 아무 일도 없었습니다 .. –

+0

It 's 앱이 루트로 실행되지 않기 때문입니다. 어쩌면 당신이 할 수있는 두 가지 애플 리케이션을 만드는 것입니다. pcap 및 "런처"를 사용하는 일반 응용 프로그램으로 일반 응용 프로그램을 루트로 실행합니다. "su -c "과 같은 것입니다. 은 __am start ...__을 사용하여 응용 프로그램을 시작하는 스크립트 일 수 있습니다. 그것은 단지 생각, 행운입니다. –