安卓使用pcap库

4

我有一个关于安卓应用的一般性问题,我需要在我的安卓应用中使用一些pcap功能。因为据我所知,Java不提供原始数据包注入和低层编程的可能性(如果我错了,请纠正我),所以我正在寻找替代方案。到目前为止,我发现以下内容:

  • ANDROID NDK
  • JNETPCAP

有没有建议我应该使用哪个或者其他建议?


你尝试过在非root手机上吗?我需要在非root的安卓手机上进行网络嗅探功能。 - Vishal Maral
2个回答

5

JNI解决方案

您需要在C或C ++中包装libpcap的调用和逻辑,并通过JNI (Java Native Interface) 公开底层函数,使您的应用程序可以在Java中调用本地代码。

关于JNI的文档在互联网上非常完整,有许多教程可以参考,例如这篇文章

如果您想轻松地在JNI中包装本地代码,可以使用Swig,它可以根据您的C / C ++本地头文件自动生成JNI代码。

获取的JNI代码应使用Android NDK作为动态库(.so)进行编译。此库应放置在您的应用程序包下的libs /目录中。然后,您可以调用System.loadLibrary(path_to_you_dynamic_library)来加载库中包含的所有符号并在Java中使用它们。

使用第三方库

如果您担心在使用JNI时会感到头疼,您可以查看此库,该库将为您完成繁重的工作,并提供API以在Java中操作原始套接字。

http://www.savarese.com/software/rocksaw/


3
您需要在C或C++中包装调用和您需要的逻辑,然后通过JNI(Java Native Interface)公开基础功能,这样您的应用程序就可以在Java中调用本地代码。
或者您需要获取已经完成此操作的库,例如,嗯,jNetPcap
在任何尝试在Android上进行数据包捕获(或使用Linux内核的任何其他操作系统)时,您可能会遇到一个问题 - 即默认情况下,被libpcap使用的基础内核机制(PF_PACKET套接字)需要root权限。如果有一种方法可以将您的代码运行为root,或者赋予它CAP_NET_RAW和可能的CAP_NET_ADMIN权限,那么可能可以使其正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接