【问题标题】:android use pcap libraryandroid 使用 pcap 库
【发布时间】:2013-03-21 20:51:33
【问题描述】:

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

  • 安卓 NDK
  • JNETPCAP

任何建议我应该使用哪一个或有人有其他建议吗?

【问题讨论】:

  • 你试过没有root的手机吗?我需要在非 root 的安卓手机上使用网络嗅探功能。

标签: java android libpcap


【解决方案1】:

JNI 解决方案

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

JNI 上的文档在互联网上非常完整,有很多关于这个主题的教程,例如this one

如果您想在 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/

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-02
      • 2012-05-21
      • 2012-06-24
      • 2012-11-10
      • 1970-01-01
      • 1970-01-01
      • 2017-03-26
      • 2019-02-09
      相关资源
      最近更新 更多