获取设备网络网址调用

时间:2014-03-11 23:28:11

标签: android wireshark network-protocols

我正在尝试构建一个应用程序,为用户提供有关其网络使用情况的统计信息,

从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

的内容

我认为该问题的最终解决方案很复杂,但欢迎任何建议。

3 个答案:

答案 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防火墙)