我正在尝试构建一个应用程序,为用户提供有关其网络使用情况的统计信息,
从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的东西
我认为该问题的最终解决方案很复杂,但欢迎任何建议.
最佳答案
如果像您所说的那样,您正在处理有根设备,则可以将监视应用程序设置为默认系统代理.
这样,通过充当transparent proxy,您将能够检测进入和离开连接.
我从哪里开始?
如果你想看看一个可能的实现,你可以试试ProxyDroid,这是开源的,绝对是一个很好的起点.
你应该做什么
您需要做的是触发一些iptables命令,以便将您的应用程序设置为系统代理:here您可以看到ProxyDroid如何做到这一点.
然后,您的应用程序将侦听连接请求,执行它们并相应地发送响应:同样,this是一个非常基本的示例,说明整个事情在您的应用程序方面是如何工作的.