4

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

  • 安卓 NDK
  • JNETPCAP

有什么建议我应该使用还是有人有其他建议?

4

2 回答 2

5

JNI 解决方案

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

互联网上的文档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/

于 2013-03-21T20:57:53.063 回答
3

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

或者你需要一个已经完成的库,例如 err, umm, jNetPcap

尝试在 Android 或任何其他使用 Linux 内核的操作系统上进行数据包捕获时可能遇到的一个问题是,默认情况下,libpcap(PF_PACKET套接字)使用的底层内核机制需要 root 权限。如果有办法以 root 身份运行您的代码,或者给它CAP_NET_RAW和可能CAP_NET_ADMIN的特权,它可能会使其工作。

于 2013-03-22T08:59:16.013 回答