我正在閱讀那個接近我的願望的問題(How to create a simple proxy in C#?)。如何創建一個簡單的C#http monitor/blocker?
我只是想開發一個c#應用程序,例如,監視Firefox,IE等,並記錄所有導航頁面。根據訪問頁面,我想阻止該網站(如父母過濾器)。
代碼片段/示例很好,但是如果您只能告訴我某些類的使用方向,我將不勝感激。 :-)
我正在閱讀那個接近我的願望的問題(How to create a simple proxy in C#?)。如何創建一個簡單的C#http monitor/blocker?
我只是想開發一個c#應用程序,例如,監視Firefox,IE等,並記錄所有導航頁面。根據訪問頁面,我想阻止該網站(如父母過濾器)。
代碼片段/示例很好,但是如果您只能告訴我某些類的使用方向,我將不勝感激。 :-)
我會回答適合父: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。您必須設計代碼以便對系統沒有顯着影響。
你不應該使用`Console.WriteLine(ex);` - 它沒有任何意義。無論是`ex.Message`(或類似的東西),或根本不使用try-catch塊。異常的消息將被自動寫入輸出。 – abatishchev 2010-05-16 17:11:29