2011-07-08 41 views
0

我被告知要編寫一個C++程序,該程序在後臺運行,並保存訪問過的網站的日誌或從計算機上傳/下載到互聯網的文件。將來,它需要進行縮放,以便程序可以跟蹤辦公室局域網中任何計算機的互聯網使用情況。C++中的互聯網使用監控工具

該項目將在各種Windows操作系統上運行,從Windows 2000到Windows 7

有人可以幫我在這?

+0

你想寫一個間諜? – slaphappy

回答

1

您需要編寫一個數據包嗅探器。如果你想寫一個好的數據包嗅探器,這是相當實際的。在網上搜索。瞭解有關C/C++套接字庫的入門知識。下面的一些網站。 herehere

+3

或者只是使用現有的。有什麼重要的一點是,重寫已經做得更好的東西時,真的重點應該放在對捕獲的分析上...... –

1

嗯......那豈不是更容易執行該公司的Web代理服務器上的功能?他們中的大多數甚至有插件來執行這個確切的功能,所以實際上不需要編寫代碼。

+0

我確信這個想法是他需要將它編碼爲練習 – galois

+0

@jaska - 我確定它不是。 「我的辦公室」部分清楚地表明這是一項工作任務,而不是學校工作。 –

0

您可以使用下面的代碼,其優點是它也會捕獲隱私瀏覽。

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(); 
    } 
}