如何创建一个简单的c#http monitor / blocker?

我正在阅读这个问题( 如何在C#中创建一个简单的代理? ),这几乎是我的意愿。

我只想要开发ac#app,例如,监控Firefox,IE等,并记录所有导航页面。 根据访问过的页面,我想阻止该网站(如父母filter)。

代码片段/样本很好,但如果您能告诉我某些课程的方向,我将不胜感激。 🙂

我会回答适合父母: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地址。 以AS管理员身份运行程序(在命令行中使用“runas”,或右键单击“以管理员身份运行”)。 只有管​​理员才能在现代版本的Windows上创建和使用原始套接字。 坐下来观看节目。

所有网络流量都会传递给您的代码(显示在屏幕上,使用此程序看起来不太好看)。

下一步是创建一些协议filter。 了解各种互联网应用程序协议(假设您还不知道),修改程序以检查数据包。 查找HTTP协议,并保存适当的数据(如GET请求)。

我个人为AIM(AOL Instant Messenger),HTTP,MSN信使(Windows Live Messenger),POP和SMTP设置了filter。 今天,HTTP得到了几乎所有东西,因为现在孩子们更喜欢facebook墙到AIM。

当孩子们达到青少年早期到中期时,你会想要退出监控。 有人说这是为了让孩子们“长大”,但真正的原因是“ 你不想知道 ”。 我退回到收集明确文本(pop,basic auth等)的get请求和用户名/密码(用于紧急情况)的URL。

我不知道青少年时期会发生什么; 我无法想象事情变得更糟,但我被告知“我还没有看到任何东西”。

就像之前所说的那样,这只适用于在目标机器上运行时(我在房子里的所有机器上运行一个副本)。 否则,为了简单的监控检查你的路由器 – 我有一些很好的日志记录function。

我最后的评论是,这个应用程序应该直接用C / C ++编写,而不是Win32 API,并作为在机器上运行管理权限的服务安装。 我不认为这种类型的代码适合托管c#。 您可以在C#中附加UI以进行监视和控制。 您必须设计代码才能对系统产生明显的影响。

您的方法取决于您是否在用于浏览的同一个盒子上或在单独的代理服务器上安装此应用程序。

如果您在单独的服务器上执行此操作,则可以更轻松地在C#/托管代码中完成此操作,因为您只需编写客户端PC将指向的C#代理服务器。 System.Net.Sockets命名空间TcpListener和TcpClient将是你的朋友。

但是,如果你在同一台机器上安装它,那么看看WinPcap和SharpPCap以及Fiddler的一些想法。

希望有所帮助。