嵌入式数据库SQLite 的编程及DD-WRT路由器程序的仿真

2016-11-17 11:11申纯洁
湖北第二师范学院学报 2016年8期
关键词:数据流路由器嵌入式

申纯洁

(湖北大学 计算机与信息工程学院, 武汉 430062)



嵌入式数据库SQLite 的编程及DD-WRT路由器程序的仿真

申纯洁

(湖北大学 计算机与信息工程学院, 武汉 430062)

针对路由器网络安全的需要,在Linux操作系统上安装了小型的SQLite数据库系统,记录各类与网络安全有关的数据,并结合C语言编程,建立了特征网络安全数据库,依据数据库中的特征向量对访问路由器的智能设备进行检测、拦截、转向、跟踪和记载审计以达到网络安全检测和防护功能。此项研究主要针对中低端(部分高端)具有DD-WRT技术的路由器,通过嵌入关系数据库及多种安全功能模块,以达到投入极小成本使路由器的安全性能上一个高台阶的目的。

网络安全;SQLite数据库;DD-WRT

随着信息技术的飞速发展和进步,网络安全已变得极为重要。基于大型关系数据库的网络安全核心技术研究(湖北省科技支撑项目2014BAA089)其核心技术之一是将关系数据库嵌入到路由器中,建立网络安全特征数据库,并依据数据库中的特征向量对进入路由器的数据进行检查、拦截、跟踪和放行等安全动作。由于路由器运行的操作系统是Linux,并且其资源有限,不能显著降低路由器性能,嵌入式数据库SQLite作为本项研究的DBMS是适合的。路由器中的程序要求能经第三方修改刷新,因此具有DD-WRT技术的路由器作为首选。

DD-WRT是一个基于Linux的无线路由软件,采用GPL协议。起源于2003年, DD-WRT提供了许多一般路由器的软件所没有的功能,例如支持XLink Kai游戏协议, 基于守护进程的服务, IPv6, 无线分布式系统(无线网桥和无线中继), RADIUS, 先进服务质量控制,无线输出功率控制, 超频能力,以及SD卡的硬件配置提供软件支持等。

本文所研究的主要内容为安装配置DD-WRT路由器程序的仿真环境、SQLite的安装配置和数据库的检索、修改、删除、插入等操作,最后以路由器数据流的特征向量数据库为例写一个DD-WRT仿真程序。

1 DD-WRT仿真环境的安装与配置

进行嵌入式软件开发,开发环境一般都是基于linux 系统。本文通过安装虚拟机软件,再在虚拟机中安装linux系统。

1.1 在VMWare 中安装Ubuntu

(1)到官网下载ubuntu-16.04-desktop-amd64.iso安装包。

(2)双击打开已安装好的VMWare 软件,点击菜单栏文件->新建虚拟机,或者直接点击主页中的“创建新的虚拟机”图标,弹出新建虚拟机向导。

(3)虚拟机新建向导有两个工作模式:典型和自定义。这里我们选择自定义模式。

(4)选择虚拟机硬件兼容性页面,保持默认即可。

(5)安装客户机操作系统。我们是通过硬盘中的ubuntu 系统镜像文件来安装的。在安装程序光盘映像文件中,浏览选择事先下载好的ubuntu 的镜像iso。点击下一步。

(6)命名该虚拟机,设置密码。并为虚拟机选择硬件配置,分配内存,指定磁盘大小和存储路径。

1.2 编译器GCC的安装

GCC是Linux 下基于命令行的C语言编译器,GCC编译器能将C、C++语言源程序、汇程式化序和目标程序编译、连接成可执行文件,如果没有给出可执行文件的名字,GCC将生成一个名为a.out的文件。使用GCC由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤∶预处理(也称预编译,Preprocessing)、编译(Compilation)、 汇编(Assembly)和连接(Linking)。GCC安装方法:将虚拟机联网,打开命令行运行sudo apt-get install build-essential ,并按提示输入管理员密码。安装完成后可以执行GCC-version的命令查看版本信息。系统如果不带vim编辑工具,可以在命令行输入sudo apt-get install vim。

1.3 编译运行

通过上述设置搭建了C语言程序运行环境,采用VIM编写简单hello.c程序的输出结果判断整个虚拟机、GCC编译环境是否搭建成功。

hello.c:

#include

Int mian(void)

{

Printf(“Hello Ubuntu ”);

}

对这个程序编译运行。

gcc -Wall -c hello.c -o hello

./hello

得到结果:

Hello Ubuntu

从结果可以看出GCC已经运行了,和理论上结果相同的,这说明本文在虚拟机上安装GCC编译环境是成功的。

2 SQLite的安装与配置

SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎,遵守ACID(Atomic、 Consistency、 Isolation、 Durability)的关系型数据库管理系统,包含在一个相对小的C库中,支持大多数的SQL92标准,并且可以在所有主要的操作系统上运行。具有三级模式的结构体系,即用户模式、逻辑模式和存储模式。相对于传统数据库,SQLite具有更好的实时性、系统开销小、底层控制能力强。SQLite能够高效地利用嵌入式系统的有限资源,提高数据的存取速度,增强系统的安全性。

2.1 SQLite在Ubuntu中安装步骤如下:

(1)将下载的SQLite软件包sqlite-snapshot-201606031859.tar.gz下载到linuxshare目录。

(2)完成以下几项配置:

①在命令行输入cd /mnt/hgfs/linuxshare,进入下载目录。

②解压文件,在命令行输入tar xvfz sqlite-snapshot-201606031859.tar.gz,解压后生成sqlite-snapshot-201606031859目录。 cd 进入sqlite-snapshot-201606031859。

③命令行输入./configure

make

sudo make install

安装成功。

2.2 SQLite的操作

(1)创建数据库

执行sqlite3命令,在当前位置创建了数据库SQLitetest.db,如图1所示:

图1 创建数据库

(2)创建表

在上述数据库中创建表student,可以用“.tables”命令去查看已创建的表,如图2所示:

图2 创建表

(3)插入数据

数据插入用insert语句就可以,查看用select语句,执行结果如图3所示:

图3 数据插入

最后,可以使用“.quit”或“.exit”退出SQLite。

3 创建基本网络安全特征数据库

文献 “电子文件网络传输特征分析”分析和论述了流出路由器数据流的特征,并提取这些特征建立了基本的网络安全特征数据库。这部分本文不作详细论述,详情读者可参阅文献[5]。

3.1 特征数据库设计

定义3.1 协议指的是数据流的序列规范。数据流s是属于协议P的协议流,ATT(p)={s| s∈S,s满足P的序列规范要求}。可识别协议集为PT={pl ,p2,… …pn}。

假设3.1 一个数据流不允许同时属于两个协议。即:∀si,pi,pj⟹ATT(pi)∩ATT(pj)。数据流和协议规范属于一对一关系,在现实当中,这种情况可能并不是绝对的,但对于大多数情况都是如此,如果允许一个数据流符合多个协议规范,那么将会大大增加误判率,并且也是不实际的,因此3.1假设是必要的。

定义3.2 特征值, 协议特征的集合,存在一到多个特征,F{fl ,f2,… …fn}。

定义3.3 数据流特征值, 数据流具有的协议特征。数据流s是协议和特征值的二元组s{p,f}。

(1)p为该数据流所属协议

(2) f为该数据流具有的特征集合

定义3.4 电子文件安全策略, 为协议和禁止传输文件的叉积C=Pn×Fn。P为协议,F为禁止传输文件,叉积为传输禁止文件的所有具有协议特征的数据流。

结合提取的特征值和以上4个定义,数据库总体设计如图4示:

图4 特征数据库总体设计

3.2 创建网络安全特征数据库

在SQLite下执行以下命令:

sqlite3 sec.db

CREATE TABLE Protocol(protocol_id integer primary key autoincrement NOT NULL,type varchar(10) NOT NULL, name varchar(16) NOT NULL);

CREATE TABLE Feature(id integer primary key autoincrement NOT NULL, value varchar(50) NOT NULL, protocol_id integer ,FOREIGN?KEY(protocol_id)?REFERENCES?Protocol(protocol_id));

CREATE TABLE Prohibited(file_id integer primary key autoincrement NOT NULL, filename varchar(30) NOT NULL, extension varchar(16) NOT NULL);

CREATE TABLE Relation (id integer primary key autoincrement NOT NULL, protocol_id bigint (0) FOREIGN?KEY?(protocol_id)?REFERENCES?Protocol(protocol_id)NOT NULL, file_id bigint(0) FOREIGN KEY (filel_id)REFERENCES Prohibite(filel_id) NOT NULL);

3.3 数据准备

将文献[5]中网络安全数据库中的数据输入到创建的表中作为基础数据。具体操作如下:

INSERT INTO Protocol VALUES(1,"应用层",'HTTP');

(2,”应用层”,’SMTP’),

(3,”应用层”,’FTP’),

(4,”应用层”,’TFTP’),

(5,”传输层”,’TCP’);

INSERT INTO Feature VALUES(1,'Content-type:multipart/form-data',1), (2,'Content-type:multipart/mixed',1),

(3,'STOU',2),

(4,'APPS',2),

(5,'STOR',2),

(6,'writeRequest',3),

(7,'Content-type:multipart/form-data',4),

(8,"TCP三次握手后马上发送一个紧急指正(PSH)为1 的TCP包",5);

INSERT INTO Prohibited VALUES(1,”答案”,’.txt’), (2,”图片”’.jpg’);

4 安全检测程序的DD-WRT仿真

4.1 安全检测程序的工作流(见图5)

图5 程序流程图

4.2 安全检测程序的编码

mysql_test.c

#include

#include

#include

#include < mysql.h>

MYSQL *g_conn; // mysql 连接

MYSQL_RES *g_res; // mysql 记录集

MYSQL_ROW g_row; // 字符串数组,mysql 记录行

#define MAX_BUF_SIZE 1024 // 缓冲区最大字节数

const char *g_host_name = "localhost";

const char *g_user_name = "ububtu";

const char *g_password = "123";

const char *g_db_name = "sec";

const unsigned int g_db_port = 2308;

int executesql(const char * sql) {

/*query the database according the sql*/

if (mysql_real_query(g_conn, sql, strlen(sql))) // 如果失败

return -1; // 表示失败

return 1; // 成功执行

}

int init_mysql() { // 初始化连接

// init the database connection

g_conn = mysql_init(NULL);

/* connect the database */

if(!mysql_real_connect(g_conn, "localhost", "ububtu", "123", "sec",2308, NULL, 0)) return -1;//如果失败

// 是否连接已经可用

if (executesql("set names utf8"))

return -1; // 如果失败

return 0; // 返回成功

}

int main(void) {

Stream stream = read-frame(route_buffer+offset,length); //按帧从路由器读取数据帧

if(stream==null) return;//如果没有数据进出直接结束程序

String sfeature = stream(offset,slength); //从数据帧中读取s特征数据

String protocol = stream(offset,plength);//从数据帧中官读取protocol数据,

String prohibited = stream(offset,proLength);//从数据帧中官读取Prohibited数据,

if (init_mysql());

print_mysql_error(NULL);

char sql[MAX_BUF_SIZE];

if (executesql(sql))

print_mysql_error(NULL);

if (executesql("SELECT * FROM Protocol")) // 句末没有分号

print_mysql_error(NULL);

g_res = mysql_store_result(g_conn); // 从服务器传送结果集至本地,mysql_use_result直接使用服务器上的记录集

int iNum_rows = mysql_num_rows(g_res); // 得到记录的行数

int iNum_fields = mysql_num_fields(g_res); // 得到记录的列数

printf("共%d个记录,每个记录%d字段 ", iNum_rows, iNum_fields);

puts("id name ");

while ((g_row=mysql_fetch_row(g_res))) // 读取的协议类型与数据库协议类型进行匹配

{

if(g_row[0] == protocol) break;

}

if(g_row[0] != protocol) //如果数据库协议表和读取的协议类别不匹配结束

exit();

if (executesql("SELECT * FROM Feature")) // 读取数据库中的F特征表

print_mysql_error(NULL);

g_res = mysql_store_result(g_conn); // 从服务器传送结果集至本地,mysql_use_result直接使用服务器上的记录集

iNum_rows = mysql_num_rows(g_res); // 得到记录的行数

iNum_fields = mysql_num_fields(g_res); // 得到记录的列数

while ((g_row=mysql_fetch_row(g_res))) // 读取的协议类型与数据库协议类型进行匹配

{

if(g_row[0] == sfeature) break;

}

if(g_row[0] != sfeature) //如果数据库F表和读取的F类别不匹配结束

exit();

if (executesql("SELECT * FROM Prohibited")) // 读取数据库中的F特征表

print_mysql_error(NULL);

g_res = mysql_store_result(g_conn); // 从服务器传送结果集至本地,mysql_use_result直接使用服务器上的记录集

iNum_rows = mysql_num_rows(g_res); // 得到记录的行数

iNum_fields = mysql_num_fields(g_res); // 得到记录的列数

while ((g_row=mysql_fetch_row(g_res))) // 读取的协议类型与数据库协议类型进行匹配

{

if(g_row[0] == prohibited) break;

}

if(g_row[0] != prohibited) //如果数据库F表和读取的F类别不匹配结束

exit();

mysql_free_result(g_res); // 释放结果集

mysql_close(g_conn); // 关闭链接

return EXIT_SUCCESS;

//阻断数据流

}

5 结束语

文章针对网络安全问题,从利用SQLite数据库对数据进行收集和管理着手,建立特征网络安全数据库,对安全检测程序的DD-WRT仿真,描述了按帧从网络读取数据流和数据库中已收集信息进行匹配的程序图。给出了安全监测程序编码。本文不足之处:未对程序编码进行测试,在后续工作中,将抓取分析更多的协议,提取更全的特征值,不断拓展和完善特征数据库,选取和构造简单高效的匹配算法。

[1]张广斌,宫金林,陈爽.SQLite嵌入式数据库系统的研究与实现[J].单片机与嵌人式系统应用,2008,5(6):11-13.

[2]谢柏林,余顺争.基于应用层协议分析的应用层实时主动防御系统[J].计算机学报,2011,34(3):452-462.

[3]沈昌祥,张焕国,土怀民,等. 可信计算研究与发展[J].中国科学 (信息科学),2010,40(2):139-166.

[4]韦勇,连一峰,冯登国.基于信息融合的网络安全态势评估模型[J].计算机研究与发展,2009,46(3):353-362.

[5]江宗武,戴承耕,李跃新. 电子文件网络传输特征分析和提取[J].电子设计工程,(201511025),2016.

[6]张倪.嵌入式软件基础[M].北京:电子工业出版社,2010:145-149.

[7]吴志红,扬跃臣.嵌入式停车场管理系统[J].计算机应用,2010,30(11):3126-3129.

[8]廖国琼.嵌入式移动实时数据库事务处理技术[M].北京:中国铁道出版社,2010:22-39.

The Programming of Embedded Database SQLite and the Simulation of DD-WRT Router Program

SHEN Chun-jie

(College of Computer and Information Engineering, Hubei University, Wuhan, 430062)

In view of the need of router network security, a small database called SQLite was designed based on Linux operation, record all types of data related to network security, and C language programming was used. The characteristic network security database was established, which is based on the feature vector of the database to detect, intercept, turn, track and record, so that can achieve network security detection and protection functions. This research mainly aimed at the low end (part of the high end) of the router with DD-WRT technology. Through the embedded relational database and a variety of security function modules, to achieve the minimum cost of inputs to the router’s security performance on a high level of purpose.

network security;SQLite database;DD-WRT

2016-06-11

湖北省科技厅科技支撑项目资助(2014BAA089)

申纯洁(1993-),女,湖北省随州市人,硕士研究生,研究方向为智能系统、信息安全。

TP311.1

A

1674-344X(2016)08-0055-05

猜你喜欢
数据流路由器嵌入式
买千兆路由器看接口参数
维持生命
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
路由器每天都要关
路由器每天都要关
汽车维修数据流基础(上)
汽车维修数据流基础(下)
TS系列红外传感器在嵌入式控制系统中的应用
搭建基于Qt的嵌入式开发平台
基于数据流聚类的多目标跟踪算法