Android上的jNetPcap:findAllDevs方法的问题!
我已成功将jNetPcap编译为Android的共享库。我已经使用此代码做了一个简单的应用程序:http://jnetpcap.com/examples/classic来测试API。Android上的jNetPcap:findAllDevs方法的问题!
的问题是,当我调用该方法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;
}
据我了解,你正在创建一个新的进程,并获得超级用户权限,但您的应用程序没有他们。
尝试在您的清单文件中添加此权限:
<uses-permission android:name="android.permission.INTERNET" />
我猜findAllDevs是要打开手机上的网络设备。
是的,通过这样做,Pcap.NOT_OK的值为false :),但代码再次达到if块,由于事实我试图在清单文件中添加更多的权限:
但没有任何事发生.. – 2011-05-12 13:29:46
这是因为你的应用程序没有以root身份运行。也许你可以做的是创建两个应用程序。您的普通应用程序使用pcap和“启动程序”,以root身份启动普通应用程序。像“su -c
嗨,我有我的应用程序相同的问题。我能够安装jnetpcap,但是在运行'findAllDevs'函数时,我收到一个空列表,在errbuf中没有错误...我想知道你是否已经解决了这个问题?我已经以root身份运行应用程序:$ sudo -i - > root#eclipse - >在eclipse中启动AVD – wasp256 2013-04-04 19:36:24
我根本没有解决它。最后,我使用本机代码来运行我的实验。如果我找到了一些我会让你知道的。 – 2013-04-05 11:03:38
Thanasis Petsas我有同样的问题。我已经使用Android NDK成功编译了JnetPcap库,但是当我从官方的JnetPcap网站运行这个经典示例时,alldevs.size()返回0.您解决了吗? – 2016-01-08 10:53:13