# 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
```