# boa_filterv1.0 **Repository Path**: disenIT/boa_filterv1.0 ## Basic Information - **Project Name**: boa_filterv1.0 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-10-15 - **Last Updated**: 2024-10-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 项目说明 ## 一、基于boa开发的web服务器 ### 1.1 目录文件说明 > 项目根目录是Web 站点根目录 ``` cgi-bin: 存放c实现的CGI接口 css: 存放网页样式文件 images: 存放网页图片素材 js: 存放网页JavaScript脚本文件 sql: 存放本项目的mysql数据库脚本文件 index.html 主页 login.html 登录页面,只有登录之后才可以进入主页 rules.html 防火墙规则管理页面,规则写法同BPF route.html 路由网关信息页面 users.html 模板页面,只作参考 ``` ### 1.2 sql脚本 ```sql drop database if exists filterdb; create database filterdb; use filterdb; -- 设计登录表 create table t_login( id integer primary key auto_increment, uname varchar(50) not null unique, upwd varchar(50) not null, head varchar(200) ); insert into t_login(uname, upwd, head) values ('admin', md5('admin123'), '/images/head.jpg'); -- 设计过滤规则表 -- op_time '启动或关闭时间' create table t_rules( id integer primary key auto_increment, title varchar(200) comment '规则描述', flag int(1) default 0 comment '是否开启, 0 关闭, 1打开', add_time timestamp default current_timestamp, op_time datetime default current_timestamp ); -- 敏感词表 -- word '敏感词' create table t_keywords( id integer primary key auto_increment, word varchar(50), w_level int(1) default 1 comment '保密级别 1 保密 2 秘密 3 绝密' ); -- 敏感数据列表 -- word_id int '敏感词的ID, 关联t_keywords' create table t_words( id integer primary key auto_increment, content text comment '捕获数据', word_id int ); -- ARP 表 create table t_arp( id integer primary key auto_increment, ip varchar(16), mac varchar(18), add_time timestamp default current_timestamp ); -- 流量统计表 create table t_bytes( id integer primary key auto_increment, up_byte varchar(255) comment '上行流量', down_byte varchar(255) comment '下行流量' ); insert into t_bytes(up_byte, down_byte) values ('0', '0'); ``` 【注意】其中 md5()是mysql数据库的函数,用于加密口令的,但它是不可逆的,如果实现登录功能,请将明文通过md5()转化之后,和数据库表的密文进行比较。 ### 1.3 cJSON的使用 使用步骤: 1. Ubuntu18之下载与安装 ```shell git clone https://gitee.com/du-yueqiang/cJSON.git cd cJSON sudo make sudo make install ``` 2. 在.c文件中引入头文件 ```c #include ``` 3. cjson的核心函数 ``` 1. 解析json文本 cJSON *json = cJSON_Parse("json字符串"); 2. 从json对象中获取成员 cJSON *json_item = cJSON_GetObjectItem(json, "成员名"); 3. 将json成员转化为字符串或数值 char *item_str = cJSON_GetStringValue(json_item); double item_number = cJSON_GetNumberValue(json_item); 4. 创建json对象或数组 cJSON *obj = cJSON_CreateObject(); cJSON *arr = cJSON_CreateArray(); 5. 向json对象中添加成员 cJSON_AddItemToObject(obj, "成员名", cJSON_CreateString("字符串值")); cJSON_AddItemToObject(obj, "成员名", json_obj); // 对象的成员属性又是一个json对象或数组 cJSON_AddItemToObject(obj, "成员名", cJSON_CreateNumber(数值)); 6. 向json数组中添加成员 cJSON_AddItemToArray(arr, cJSON_CreateString("字符串成员")); cJSON_AddItemToArray(arr, json_obj); // 向数组中添加json对象成员 7. json对象或数组转化为字符串 char *json_str = cJSON_Print(obj); char *json_str2 = cJSON_Print(arr); ``` 4. 编译时注意事项 ``` 编译时: 加 -lcjson 第一次编译之后, 需要执行 sudo ldconfig, 将/usr/local/lib路径加入到so库加载的环境 中 ``` ## 二、路由器或防火墙主程序 ### 2.1 启动路由器主程序 ``` cd cgi-bin sudo ./router ``` ### 2.2 重启 ``` 基于HTTP协议的GET请求: /cgi-bin/restart ```