2013-03-21 28 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權限,那麼可以讓它工作。