diff --git a/README.md b/README.md index c1e8a83..9302dde 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,24 @@ +## 总体设计 + +跨平台总体设计 + +![域名阻断-总体结构](./image/域名阻断-总体结构.jpg) + +windows端总体设计 + +![域名阻断-windows总体设计](./image/域名阻断-windows总体设计.jpg) + +linux端总体设计 + +![域名阻断-Linux总体设计](./image/域名阻断-Linux总体设计.jpg) + +代码详细设计 + +![域名阻断-详细设计](./image/域名阻断-详细设计.jpg) + +## json数据格式 ```json { @@ -18,6 +37,27 @@ } ``` +## 开发文档 + +1. 首先考虑核心部分的构建,即如何阻断网络。我们先看下windows上的实现方案之一。windows上可以选用WFP(Windows Filtering Platform),进行网络阻断。它需要写成驱动加载到内核,所以得学习下windows驱动编程。相关文档见: + * [windows驱动开发环境搭建以及helloworld](https://blog.csdn.net/sinat_38816924/article/details/127933589) + * [windows内核编程-文件操作](https://blog.csdn.net/sinat_38816924/article/details/128159702) + * [windows驱动编程-应用与内核通信](https://blog.csdn.net/sinat_38816924/article/details/128341319) + * [windows驱动开发-WDF编程](https://blog.csdn.net/sinat_38816924/article/details/128636594) + * [WFP网络过滤驱动-限制网站访问](https://blog.csdn.net/sinat_38816924/article/details/129178452) + +2. 接下来,我们在考虑如何在Linux上阻断网络。这里选用的是`nftables`。`nftables`的简单使用见:[iptables和nftables的使用](https://blog.csdn.net/sinat_38816924/article/details/129001218) + +3. 如果使用WFP用户层接口,需要在用户层维护一个handle。因此,需要一个服务程序。windows上使用[windows服务编程](https://blog.csdn.net/sinat_38816924/article/details/129229624)。 + +4. linux上,我最开始打算使用守护进程,也列了下[禁止程序重复启动的一些方法](https://blog.csdn.net/sinat_38816924/article/details/129272271)。后来选用`systemctl`管理服务。关于服务设置,我简单整理了下:[linux-windows服务设置-小结](https://blog.csdn.net/sinat_38816924/article/details/126563564) + +5. 为了使用UI程序可以和服务程序通信,还需要一个server程序。所以,参考`boost::asio`的示例,简单实现一个[单线程异步的socket服务程序](https://blog.csdn.net/sinat_38816924/article/details/129339220) + +6. 由于代码在windows/linux上的不同IDE中开发,使用clang-format进行代码风格管理:[C++代码格式化-clang-format](https://blog.csdn.net/sinat_38816924/article/details/129469086) + +7. 至于UI界面,选用qt和web都行。或者,UI代码在其他机器上运行都可以。这是进程间使用socket通信带来的好处。这里,使用qt,创建一个可以与用户交互的客户端程序。 + ## 编译与打包 ### linux平台 diff --git "a/image/\345\237\237\345\220\215\351\230\273\346\226\255-Linux\346\200\273\344\275\223\350\256\276\350\256\241.jpg" "b/image/\345\237\237\345\220\215\351\230\273\346\226\255-Linux\346\200\273\344\275\223\350\256\276\350\256\241.jpg" new file mode 100644 index 0000000..223a595 Binary files /dev/null and "b/image/\345\237\237\345\220\215\351\230\273\346\226\255-Linux\346\200\273\344\275\223\350\256\276\350\256\241.jpg" differ diff --git "a/image/\345\237\237\345\220\215\351\230\273\346\226\255-windows\346\200\273\344\275\223\350\256\276\350\256\241.jpg" "b/image/\345\237\237\345\220\215\351\230\273\346\226\255-windows\346\200\273\344\275\223\350\256\276\350\256\241.jpg" new file mode 100644 index 0000000..72cd4f8 Binary files /dev/null and "b/image/\345\237\237\345\220\215\351\230\273\346\226\255-windows\346\200\273\344\275\223\350\256\276\350\256\241.jpg" differ diff --git "a/image/\345\237\237\345\220\215\351\230\273\346\226\255-\346\200\273\344\275\223\347\273\223\346\236\204.jpg" "b/image/\345\237\237\345\220\215\351\230\273\346\226\255-\346\200\273\344\275\223\347\273\223\346\236\204.jpg" new file mode 100644 index 0000000..83e027f Binary files /dev/null and "b/image/\345\237\237\345\220\215\351\230\273\346\226\255-\346\200\273\344\275\223\347\273\223\346\236\204.jpg" differ diff --git "a/image/\345\237\237\345\220\215\351\230\273\346\226\255-\350\257\246\347\273\206\350\256\276\350\256\241.jpg" "b/image/\345\237\237\345\220\215\351\230\273\346\226\255-\350\257\246\347\273\206\350\256\276\350\256\241.jpg" new file mode 100644 index 0000000..5dc78ab Binary files /dev/null and "b/image/\345\237\237\345\220\215\351\230\273\346\226\255-\350\257\246\347\273\206\350\256\276\350\256\241.jpg" differ