前言
项目地址:domain_block
演示视频:域名阻断项目演示
总体设计
跨平台总体设计
windows端总体设计
linux端总体设计
代码详细设计
开发文档
-
首先考虑核心部分的构建,即如何阻断网络。我们先看下windows上的实现方案之一。windows上可以选用WFP(Windows Filtering Platform),进行网络阻断。它需要写成驱动加载到内核,所以得学习下windows驱动编程。相关文档见:
-
接下来,我们在考虑如何在Linux上阻断网络。这里选用的是
nftables
。nftables
的简单使用见:iptables和nftables的使用 -
如果使用WFP用户层接口,需要在用户层维护一个handle。因此,需要一个服务程序。windows上使用windows服务编程。
-
linux上,我最开始打算使用守护进程,也列了下禁止程序重复启动的一些方法。后来选用
systemctl
管理服务。关于服务设置,我简单整理了下:linux-windows服务设置-小结 -
为了使用UI程序可以和服务程序通信,还需要一个server程序。所以,参考
boost::asio
的示例,简单实现一个单线程异步的socket服务程序 -
由于代码在windows/linux上的不同IDE中开发,使用clang-format进行代码风格管理:C++代码格式化-clang-format
-
至于UI界面,选用qt和web都行。或者,UI代码在其他机器上运行都可以。这是进程间使用socket通信带来的好处。这里,使用qt,创建一个可以与用户交互的客户端程序。