【问题标题】:How to create a simple c# http monitor/blocker?如何创建一个简单的 c# http 监视器/拦截器?
【发布时间】:2010-10-29 19:04:58
【问题描述】:

我正在阅读那个接近我愿望的问题 (How to create a simple proxy in C#?)。

我只是想开发一个 c# 应用程序,例如,监视 Firefox、IE 等并记录所有导航页面。根据访问的页面,我想屏蔽该网站(如家长过滤器)。

代码 sn-ps/samples 很好,但如果您能告诉我该类的一些使用方向,我将不胜感激。 :-)

【问题讨论】:

    标签: c# http monitoring blocking


    【解决方案1】:

    您的方法将取决于您是将该应用程序安装在用于浏览的同一个机器上,还是安装在单独的代理服务器上。

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

    但是,如果您将其安装在同一台机器上,请查看 WinPcapSharpPCap 以及可能的 Fiddler 以获得一些想法。

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      我会回答适合父母的问题:ala "Parental Controls"

      您可以在孩子不到 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);
              }
          }
      }
      

      请注意,这只是一个“sn-p”,缺乏适当的设计和错误检查。 [请不要使用“原样” - 您确实要求只是一个开始] 将 IP 地址更改为您的机器。运行程序AS Administrator(在命令行中使用“runas”,或右键单击“以管理员身份运行”)。只有管​​理员可以在现代版本的 Windows 上创建和使用原始套接字。坐下来观看节目。

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

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

      我个人为 AIM (AOL Instant Messenger)、HTTP、MSN messenger (Windows Live Messenger)、POP 和 SMTP 设置了过滤器。今天,由于现在孩子们更喜欢 Facebook 墙而不是 AIM,因此 HTTP 几乎可以满足所有需求。

      随着孩子们进入青少年时期,您将希望退出监控。有人说这是为了让孩子“长大”,但真正的原因是“你不想知道”。我放弃了只收集获取请求的 URL,以及以明文形式(pop、基本身份验证等)的用户名/密码(用于紧急情况)。

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

      就像之前有人说的那样,这只在目标机器上运行时才有效(我在房子里的所有机器上运行一个副本)。否则,为了简单的监控检查您的路由器 - 我的路由器有一些不错的日志记录功能。

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

      【讨论】:

      • 你不应该使用Console.WriteLine(ex); - 它没有任何意义。 ex.Message(或类似的东西)或者根本不使用 try-catch 块。异常的消息将自动写入输出。
      • 使用 Proxifier Portable 和 Putty 创建一个安全的 ssh 隧道到外部代理,所有这些工作都是徒劳的:P 不过 +1,因为我发现这个答案非常有趣,这将是一个好的开始我的一个新项目。
      • 非常感谢您的这篇文章。请我们获得有关创建一些协议过滤器的更多指导。我应该搜索什么?我正在尝试搜索“http 协议过滤器 c#”,但我不太确定如何处理此代码写入控制台的所有随机字符。
      • 如何使用 c++ 制作这样的应用程序?我找不到任何东西
      猜你喜欢
      • 1970-01-01
      • 2020-09-15
      • 1970-01-01
      • 2014-04-05
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2014-05-29
      • 1970-01-01
      相关资源
      最近更新 更多