2009-05-29 54 views

回答

17

我會回答適合父:ALA「家長控制」

您可以用代理服務器開始出來的時候,孩子們都小於10歲左右。之後,他們將弄清楚如何繞過代理(或運行繞過代理的自己的客戶端應用程序)。在青少年時代,你可以使用原始插座。 將此程序鍵入Visual Studio(C#)。

class Program 
{ 
    static void Main(string[] args) 
    { 
     try 
     { 
      byte[] input = BitConverter.GetBytes(1); 
      byte[] buffer = new byte[4096]; 
      Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP); 
      s.Bind(new IPEndPoint(IPAddress.Parse("192.168.1.91"), 0)); 
      s.IOControl(IOControlCode.ReceiveAll, input, null); 

      int bytes = 0; 
      do 
      { 
       bytes = s.Receive(buffer); 
       if (bytes > 0) 
       { 
        Console.WriteLine(Encoding.ASCII.GetString(buffer, 0, bytes)); 
       } 
      } while (bytes > 0); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex); 
     } 
    } 
} 

請注意,這只是一個「片段」,缺少適當的設計和錯誤檢查。 [請不要使用'原樣' - 你只是要求一個開始]將IP地址更改爲您的機器。運行程序作爲管理員(在命令行上使用「runas」,或者右鍵單擊「以管理員身份運行」)。只有管​​理員可以在現代版本的Windows上創建和使用原始套接字。坐下來看節目。

所有的網絡流量都會傳送到您的代碼中(顯示在屏幕上,這個程序看起來不太好)。

您的下一步是創建一些協議過濾器。瞭解各種互聯網應用協議(假設您不知道),修改程序以檢查數據包。尋找HTTP協議,並保存適當的數據(如GET請求)。

我個人爲AIM(AOL Instant Messenger),HTTP,MSN Messenger(Windows Live Messenger),POP和SMTP設置了過濾器。今天,由於孩子們更喜歡現在的AIM,因此HTTP幾乎涵蓋了所有內容。

隨着孩子們到達他們早年到中期的青少年時代,您會想要延遲監測。有人說這是爲了讓孩子們「長大」,但真正的原因是「你不想知道」。我放棄收集獲取請求的URL,以及明文形式(流行,基本認證等)的用戶名/密碼(用於緊急情況)。

我不知道青少年後期會發生什麼,我無法想象事情會變得更糟,但我被告知「我還沒有看到任何東西」。

就像之前所說的那樣,這隻適用於在目標機器上運行(我在房屋中的所有機器上運行副本)。否則,爲了簡單的監視檢查你的路由器 - 我的日誌功能很好。

我最後的評論是,這個應用程序應該用C/C++直接寫在Win32 API上,並作爲一個在機器上以管理權限運行的服務來安裝。我不認爲這種類型的代碼適用於託管的c#。您可以在C#中附加一個用於監視和控制的UI。您必須設計代碼以便對系統沒有顯着影響。

+0

你不應該使用`Console.WriteLine(ex);` - 它沒有任何意義。無論是`ex.Message`(或類似的東西),或根本不使用try-catch塊。異常的消息將被自動寫入輸出。 – abatishchev 2010-05-16 17:11:29

7

您的方法取決於您是否將該應用程序安裝在您用於瀏覽或在單獨的代理服務器上使用的相同框上。

如果你在單獨的服務器上這樣做,在C#/託管代碼中完成此操作會更容易,因爲您只需編寫客戶端PC將指向的C#代理服務器即可。 System.Net.Sockets命名空間TcpListener和TcpClient將成爲你的朋友。

但是,如果您要在同一臺機器上安裝此設備,請參閱WinPcapSharpPCap,或許還有Fiddler以獲得一些創意。

希望有所幫助。