5

jNetPcap を Android の共有ライブラリとしてコンパイルすることに成功しました。API をテストするために、 http: //jnetpcap.com/examples/classicというコードを使用して簡単なアプリケーションを作成しました。

問題は、メソッド findAllDevs を呼び出すと、「デバイスのリストを読み取れません。エラー issocket: 許可が拒否されました」というメッセージで例外が発生することです。

アプリケーションのルート権限を取得するためにプログラムの最初の部分で呼び出しを行い、ルート化された電話に対してアプリケーションをテストしているため、理由がわかりません。アプリケーションを実行すると、「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; 
 }
4

1 に答える 1

0

私の知る限り、新しいプロセスを作成してスーパーユーザーの許可を取得していますが、アプリにはそれらがありません。

マニフェスト ファイルにこのアクセス許可を追加してみてください。

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

私が思うに、findAllDevs は電話のネットワーク デバイスを開きます。

于 2011-05-11T18:45:04.540 に答える