为 Windows 编写家长控制软件






4.78/5 (9投票s)
编写家长控制软件:冒险的开始
引言
现在普遍认为互联网是一个危险的地方,尤其是对儿童而言。
作为一个新手父母,我一直在寻找一款好的家长控制软件安装在我的电脑上。
市面上有许多软件,有些是免费的,大多数价格在 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 发布和求助