android使用pcap库

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

  • ANDROID NDK
  • JNETPCAP

我应该使用的任何建议或任何人都有其他建议吗?

JNI解决方案

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

关于JNI的文档在互联网上非常完整,关于这个主题的很多教程都存在,比如这个 。

如果要在JNI中轻松包装本机代码,可以使用Swig ,它允许您根据C / C ++本Swig自动生成JNI代码。

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

使用第三方库

如果您在确定如何使用JNI时害怕头痛,可以查看这个为您工作的库,并提供一个API来操作Java中的原始套接字。

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

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

或者您需要获得已经完成的库,例如,err,umm, jNetPcap 。

在Android上或使用Linux内核的任何其他操作系统上进行数据包捕获的任何尝试都可能遇到的一个问题是,默认情况下,libpcap( PF_PACKET套接字)使用的底层内核机制需要root权限。 如果有一种方法可以以root身份运行代码,或者为其提供CAP_NET_RAWCAP_NET_ADMIN权限,则可以使其工作。