2013-03-21 81 views
3

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

  • ANDROID NDK
  • JNETPCAP

任何建议其中一个或没有任何人有其他的建议?

+0

您是否尝试过无根电话?我需要在非rooted的android手机上使用网络嗅探功能。 – BhendiGawaar 2017-03-05 11:46:41

回答

4

的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/

3

你需要用你需要出在C或C的libpcap ++调用和逻辑,并通过JNI(Java本地接口)露出了下面的功能,以便您的应用程序可以调用Java本机代码。

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

一个问题,你可能有任何尝试对Android的数据包捕获 - 或使用Linux内核的任何其他 OS - 是,默认情况下,通过libpcap的(PF_PACKET插座)使用的底层内核机制要求根特权。如果有办法以root用户身份运行你的代码,或者为其提供CAP_NET_RAWCAP_NET_ADMIN权限,那么可以让它工作。