【问题标题】:internet usage monitoring tool in C++ [closed]C ++中的互联网使用监控工具[关闭]
【发布时间】:2011-07-08 11:50:56
【问题描述】:

有人告诉我编写一个 C++ 程序,该程序在后台运行并记录访问过的网站或从计算机上传/下载到 Internet 的文件。将来,它需要扩展,以便该程序可以跟踪我办公室局域网中任何计算机的互联网使用情况。

该程序将在各种 Windows 操作系统上运行,从 Windows 2000 到 Windows 7。

有人可以帮我吗?

【问题讨论】:

  • 你想写一个间谍软件吗?

标签: c++ networking web monitoring traffic


【解决方案1】:

您需要编写一个数据包嗅探器。如果您想要编写一个好的数据包嗅探器,这是非常实际的项目。在网上搜索一下。了解 C/C++ 套接字库以开始使用。下面的一些网站。 herehere

【讨论】:

  • 或者只使用现有的。当真正的重点应该放在分析捕获上时,尝试非常糟糕地重写已经做得更好的东西有什么意义......
【解决方案2】:

嗯...在公司的网络代理服务器上执行该功能不是更容易吗?他们中的大多数甚至都有插件来执行这个确切的功能,因此实际上不需要编写任何代码。

【讨论】:

  • 我确信这个想法是他需要将其编码为练习
  • @jaska - 我确定不是。 “我的办公室”部分清楚地表明这是一项工作分配,而不是学校作业。
【解决方案3】:

您可以使用以下代码,其优点是它还会捕获隐私浏览。

CoInitialize(NULL);

LHook = SetWinEventHook(EVENT_OBJECT_FOCUS, EVENT_OBJECT_VALUECHANGE, 0, RT_Browsing_WinEventProc, 0, 0, WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS);

那么回调函数将是:

void CALLBACK RT_Browsing_WinEventProc(HWINEVENTHOOK hWinEventHook, DWORD event, HWND hwnd, LONG idObject, LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime)
{
    IAccessible* pAcc = NULL;
    VARIANT varChild;
    HRESULT hr = AccessibleObjectFromEvent(hwnd, idObject, idChild, &pAcc, &varChild);
    if ((hr == S_OK) && (pAcc != NULL))
    {
        BSTR bstrName, bstrValue;
        pAcc->get_accValue(varChild, &bstrValue);
        pAcc->get_accName(varChild, &bstrName);

        char className[50];
        GetClassNameA(hwnd, className, 50);

        if (bstrName && bstrValue)
        {
            if ((strcmp(className, "Internet Explorer_Server") == 0))
            {
                if (IsValidURL(NULL, bstrValue, NULL) == S_OK)
                {
                    if (bstrValue != E_LastURL)
                    {
                        // bstrValue will hold the new URL (Internet Explorer)
                        E_LastURL = bstrValue;
                    }
                }
            }

            if ((strcmp(className, "Chrome_WidgetWin_1") == 0) && (wcscmp(bstrName, L"Address and search bar") == 0))
            {
                if (IsValidURL(NULL, bstrValue, NULL) == S_OK)
                {
                    if (bstrValue != C_LastURL && bstrValue != L"")
                    {
                        // bstrValue will hold the new URL (Chrome)
                        C_LastURL = bstrValue;
                    }
                }
            }
        }
        pAcc->Release();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 2012-08-15
    相关资源
    最近更新 更多