我正在尝试构建一个应用程序,为用户提供有关其网络使用情况的统计信息,
从3G / Wifi冲浪到应用网络使用。
我正在寻找的主要重要数据是网络电话的网址。
我有下一个代码,找到浏览器历史记录:
private void getBrowserHistory()
{
String[] proj = new String[]{Browser.BookmarkColumns.TITLE, Browser.BookmarkColumns.URL};
String sel = Browser.BookmarkColumns.BOOKMARK + " = 0"; // 0 = history, 1 = bookmark
Cursor mCur = this.managedQuery(Browser.BOOKMARKS_URI, proj, sel, null, null);
this.startManagingCursor(mCur);
mCur.moveToFirst();
if (mCur.moveToFirst() && mCur.getCount() > 0)
{
while (mCur.isAfterLast() == false)
{
String title = mCur.getString(mCur.getColumnIndex(Browser.BookmarkColumns.TITLE));
String url = mCur.getString(mCur.getColumnIndex(Browser.BookmarkColumns.URL));
Log.d(LOG_TAG, "Site title: " + title);
Log.d(LOG_TAG, "Site url: " + url);
mCur.moveToNext();
}
}
}
但要找到应用程序网络使用情况,我需要更像WireShark
的内容我认为该问题的最终解决方案很复杂,但欢迎任何建议。
答案 0 :(得分:2)
如果像您说的那样,您正在处理 rooted device ,则可以将监控应用程序设置为默认的系统代理。
这样,通过充当transparent proxy,您将能够检测到进入和离开的连接。
我从哪里开始?
如果你想看看一个可能的实现,你可以试试ProxyDroid,这是一个开源的,绝对是一个很好的起点。
你应该做什么
您需要做的是触发一些iptables
命令,以便将您的应用程序设置为系统代理:here您可以看到ProxyDroid如何做到这一点。
然后,您的应用程序将侦听连接请求,执行它们并相应地发送响应:再次,this是一个非常基本的示例,说明整个事情在您的应用程序方面是如何工作的。
答案 1 :(得分:1)
您无法在非root设备上实现您想要的功能。
(Play商店中有一个Wireshark等效应用程序已经用于名为Shark for root的有根设备。
顺便说一下,阅读浏览器历史记录的代码只能从默认的Android浏览器中获取历史记录。如果用户运行其他浏览器(例如Firefox),则它不会使用相同的数据库,因此其历史记录不会出现在那里。
答案 2 :(得分:1)
我的回答有点模糊,我提前道歉但您是否考虑在设备上设置本地vpn。这是noroot firewall的方式。这将允许您查看流入和流出设备的所有数据。只有cavat是用户无法使用任何其他vpn(即他们无法工作,或使用noroot防火墙)