65.9K
CodeProject 正在变化。 阅读更多。
Home

为 Windows 编写家长控制软件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.78/5 (9投票s)

2010年7月7日

GPL3

9分钟阅读

viewsIcon

59484

downloadIcon

2749

编写家长控制软件:冒险的开始

引言

现在普遍认为互联网是一个危险的地方,尤其是对儿童而言。

作为一个新手父母,我一直在寻找一款好的家长控制软件安装在我的电脑上。

市面上有许多软件,有些是免费的,大多数价格在 40 美元左右。

我试过几款,但很快意识到没有一款能真正满足我的需求,它们都有我喜欢的一两个功能,但要么缺少很多东西,要么有很多我实际上不想要的功能。

在我看来,理想的软件应该包含一套模块,同时也允许扩展,有点像 Firefox 浏览器。

由于找不到这样的软件,在一个下雨的冬日晚上,我决定开始开发这样一款软件。会有多难呢?

本文包含

  • 我们迄今为止的进展故事
  • 全部源代码
  • 未来的计划和求助

背景

无论您有什么才能,我都希望您能为这个项目贡献一份力量。

我将受益于

  • C++ 程序员(尤其是 Winsock)
  • C# 程序员
  • 任何其他 .NET 语言程序员

但也

  • 希望提交请求的父母
  • 对现有家长控制软件感到沮丧的青少年

下载代码

我多年来发表过几篇文章,我不认为我曾给出过任何警告。

这次我告诉您:**不要**在您的机器上安装该软件,而要在虚拟机上安装。

我正在开发它,并使用虚拟机进行测试。您也应该这样做。

如果您足够疯狂地在您的机器上运行它,我建议您先备份您的注册表。

Run Regedit 

Right click the key
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Winsock and select
Export. Choose a folder (my documents is ok) and enter the name :
winsock

Right click the key
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Winsock2 and
select Export. Enter the name : winsock2

如果您弄崩溃了您的网络层,我无法保证这两 (2) 个文件能恢复您的机器。
格式化您的硬盘并重新安装 Windows 应该可以(但是)。

如果您仍然决定要这样做,代码可以在 www.easyparentalcontrol.com 上找到。

您需要 Tortoise SVN 之类的软件来下载源代码。

编译代码

文件 lsp.sln 是一个 Visual Studio 2010 C++ 解决方案。它是一个 分层服务提供程序 “防火墙”应用程序。

文件 MiniWebBrowser.sln 是一个 Visual C# 2010 解决方案。

这两个解决方案都设计为在免费的 Visual Studio Express 或任何更昂贵的版本中运行。这两个项目都应该被编译。

安装防火墙

要安装防火墙,bin 文件夹中有一个小的批处理文件。您必须提供一个参数,我通常输入一个从 1 到 n 的顺序号。该批处理文件会注销所有分层提供程序,包括您当前的防病毒或防火墙程序。然后它会将新的防火墙复制到 temp 目录并重新注册它。

C:\easyparentalcontrol\trunk\lsp\bin>i 21
Uninstalling the firewall
Hello World
1 LSPs installed:
   8106: v20 with 44 layered entries
Removing LSPs...
Removing dummy entry for: v20
Removing the associated layered entries with GUIDs:
 GUID: {1D99CFE0-CE76-4AD7-8CB5-89B47236B8F8}
 8197: v7 over [MSAFD Tcpip [TCP/IP]]
...
 Uninstalled providers for {0D8DE36F-0E77-4A6F-85FE-9895B7D57FF7}
Press any key to continue...

Copying and reinstalling the firewall
 1 file(s) copied.
LSP name is 'v21'

让我有点困惑的是,在安装过程中,没有任何 Windows 安全警告出现,即使您以这种方式安装的程序可能不如我的意图好。我将不再赘述。

WebBrowser 是一个简单的测试浏览器,启动时间短,用于测试。它不需要任何安装。

测试防火墙

可以通过 lsp.sln 解决方案来测试防火墙。调试选项已设置为运行:C:\easyparentalcontrol\trunk\bin\MiniWebBrowser.exe

如果防火墙已正确安装,输出窗口应包含类似内容。这表明防火墙有效地阻止了浏览器与系统 Winsock 库之间的所有通信。

5456: EasyWSPAddressToString
5456: EasyWSPIoctl
5456: EasyWSPBind
5456: EasyWSPGetSockName
5456: EasyWSPConnect
5456: EasyWSPSend
5456: EasyWSPRecv
5456: WSPRecv(1 bytes)
5456: EasyWSPSelect
5456: EasyWSPSelect
5456: EasyWSPSetSockOpt
5456: EasyWSPAddressToString
5456: EasyWSPSetSockOpt
5456: EasyWSPSetSockOpt
5456: EasyWSPSetSockOpt
5456: EasyWSPSend
5456: EasyWSPRecv
5456: WSPRecv(1260 bytes)
5456: EasyWSPSend
5456: EasyWSPRecv
5456: WSPRecv(1 bytes)

难以捉摸的 LSP

编写防火墙证明非常困难,非常非常困难。过去,人们会简单地替换 Winsock 库,用自己的版本来代替。现在这已不可能。
Windows 提供了一些 API 来编写防火墙,但它是基于端口和 IP 的过滤,而不是像家长控制防火墙可能需要的基于内容的过滤。

我们花了一些时间寻找有效的技术,并在此处找到了关于 LSP 的一些难以捉摸的文档:http://en.wikipedia.org/wiki/Layered_Service_Provider。文档非常稀少。

MSDN 杂志在 1999 年 5 月发表了一篇文章,此后很少有相关信息。但 Windows 7 SDK 中仍然存在示例文件:
C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\netds\winsock\lsp

这段代码正在痛苦地改编为 Visual C++/CLI,是我们防火墙的基础。我修复的步骤如下:

  • 重新构建一个可以在 VS 2010 中编译的项目(已完成)
  • 启用预编译头文件(已完成)
  • .NET 库互操作性(已完成)
  • 将全局变量和函数重构为类、成员和方法(仅开始)

未来计划

如果您对这个免费的家长控制软件项目感兴趣,甚至愿意为此做出贡献,那么这一部分才对您有意义。

正如我之前所说,我们对各种贡献者都感兴趣,从程序员到平面设计师,再到孩子们、父母、翻译、黑客、项目经理、赞助商……

本文是一个名为 'Easy Parental Control.com' 的大型项目的一部分。

他们希望该网站能为全世界提供一套家长控制套件。

我们希望 EasyParentalControl 能做到:

  • 简单
  • 强大
  • 受欢迎
  • 免费且财务成功

简单

EasyParentalControl 必须易于安装和使用,即使是普通父母,他们通常在计算机方面的知识可能不如他们的孩子。
我们朝着这个方向迈出的步骤之一是决定使用网页界面来管理程序。
人们知道如何使用他们的网络浏览器,他们不必学习新的界面。
我们必须确保:

  • 界面简单
  • 随时可以使用后退按钮(不会出现“您确定要重新提交此页面吗?”)。
  • 可以收藏管理页面

强大

这是一个棘手的问题。随着 EasyParentalControl 变得越来越强大,我们可能会冒使其使用起来不那么简单的风险。为了保持简单,我们采取的步骤之一是将 EasyParentalControl 构建为一套插件。这样,我们就可以在不增加软件负担的情况下进行实验。例如,有人可能希望在学校假期期间放宽时间限制。这可以开发成一个可选插件。我们将积极鼓励人们为我们编写插件。

受欢迎

我们看过大约 100 种产品。每年都有更多产品诞生和消亡。它们的价格通常在 50 到 100 美元之间。我们的计划是推出并永久保持一个免费版本。此版本将不提供最佳支持和所有插件。我们希望成为最好的免费家长控制程序。

免费且财务成功

这又是一个难题,正如我妻子所说,你如何做到免费且财务成功?我习惯于回答:“看看谷歌”。我们在至少两年内赚不到多少钱,但如果我们要让项目得以延续,我们就必须获得一些收入。如果 EasyParentalControl 和我们的小公司在两年后仍然在运营,我们将有几种选择:

  • 为某些可选插件或服务收费
  • 使用广告
  • 特色“产品”

软件架构

我们典型的设置将涉及 3 台计算机:

在孩子的计算机上

  • 后台过滤器或记录器(键盘、网络、时间记录器……)
  • 可选的通知程序(可能显示为任务栏图标)。
  • 可选的儿童专用浏览器

在父亲的计算机上

  • 一台网络浏览器应该足以查看/修改一切
  • 可选的实时通知程序(当孩子计算机被父母共享时,也可以清楚地显示您是父母)。

即使在孩子计算机关闭的情况下,也应该可以进行管理。

在我们的服务器上,我们将拥有:

  • 一个包含所有人设置的数据库
  • 一个包含网站/页面分类的数据库(基于 http://www.icra.org/archive/vocabularyv02/,但我们可以扩展)
  • 可选的孩子日志(供父亲在孩子计算机出现故障时查阅)

需要编写的软件

后台活动记录器

我们将不得不监控和过滤所有计算机活动。这意味着监控计算机的开/关、输入的按键和使用的程序。在插件中,我们可以监控更多内容,例如针对“魔兽世界”的特殊插件。第二个挑战将是使其难以绕过。这些程序将用 C# 编写。

后台互联网过滤器

这可能是我们项目中技术含量最高的部分。我希望能够即时修改页面内容。

我确定了几种创建互联网过滤器的方法:

  • 在孩子的计算机上编写一个(假的)Web 或 Socks 代理服务器
  • 编写一个网络协议(VMWare 就是这样做的)
  • 使用 Microsoft 分层服务提供程序(Winsock2 引入)

由于该程序的低级特性,它可能需要用 C++ 编写,至少部分用 C++(可能是托管 C++)。

通知程序

这并不难,它将简单地侦听服务并显示其消息。进程间通信方法的选择至关重要。相同的通知程序也可以在父亲的计算机上使用,并提供孩子活动的实时通知。

儿童专用浏览器

这也不难,但对年幼的孩子来说很方便,而且它允许我们展示我们的“白名单”网站。

插件

即使是我们自己的程序也将是插件。这样,它们就可以通过最小的干扰被更先进的版本取代。

网页分类

我们为此考虑了很长时间。很难说什么是适合孩子,什么是不适合孩子;对 16 岁的孩子合适的东西,对 5 岁的孩子来说可能完全不合适。
为给定页面选择最小年龄也非常困难。这会因您的敏感度甚至当时的 the moment 的情绪而有很大差异。

因此,选择是用客观的分类来描述页面/网站。我们最初将使用 icra 词汇表。

我相信这是现有的最佳分类之一。我们可以扩展它,但尽可能坚持它将非常有价值。

其中一个挑战将是要求我们的用户理解并贡献页面分类。我将为此写一份文档。

EasyParentalControl.com Web 服务器

EasyParentalControl.com Web 服务器将提供两项不同的服务:

  • Windows 软件的集中式数据库
  • 标准 Web 浏览器的 Web 服务器

最后

我越深入研究,就越意识到这项任务是巨大的。我写这篇文章,一部分是为了理清思路,决定下一步的方向,但也是希望你们中的一些人能志愿者帮助我。

您可以通过此网站或发送电子邮件至 pascal2007@ganaye.com 与我联系。

历史

  • 2010/7/7:首次 LSP 发布和求助
© . All rights reserved.