2011-05-11 8 views
5

jNetPcapをAndroid用の共有ライブラリとして正常にコンパイルしました。私はこのコードを使って簡単なアプリケーションを作った:http://jnetpcap.com/examples/classic、APIをテストする。私が持っているのでAndroidの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としてアプリケーションを実行しています:$ sudo -i - > root#eclipse - > AVDをEclipseで起動します。 – wasp256

+0

私は全く解決しませんでした。最後に、私は実験を実行するためにネイティブコードを使用しました。もし私が何かを見つけたら、あなたに知らせます。 –

+0

Thanasis Petsas私は同じ問題があります。私はAndroid NDKでJnetPcapライブラリを正常にコンパイルしましたが、公式のJnetPcapウェブサイトからこのクラシックな例を実行すると、alldevs.size()は0を返します。あなたはそれを解決しましたか? –

答えて

0

私の知る限り理解し、新しいプロセスを作成し、スーパーユーザー権限を取得しているが、あなたのアプリがそれらを持っていません。マニフェストファイルにこの権限を追加

試してみてください。私はfindAllDevsを推測するよう

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

は電話でのネットワークデバイスをオープンする予定です。

+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アプリがルートとして実行されていないためです。たぶんあなたができることは、2つのアプリケーションを作成することです。あなたの普通のアプリケーションをpcapと "ランチャー"を使ってあなたの普通のアプリケーションをrootとして起動させます。 "su -c "のようなものです。 は、__am start ...__を使用してアプリケーションを起動するスクリプトにすることができます。それはちょうどアイデア、幸運です。 –