boa服务器笔记
BOA架构资料
针对当前MTK WEB机制进行代码分析总结,总体来说当前机制的重点及难点涉及两个部分,一个是请求处理的核心状态机变迁过程,另一个就是ASP动态解析器的实现,这里分为三部分进行描述,分别对核心状态机变迁、ASP词法解析、语法解析、语法树动作的总结,以及当前服务器的源码分析笔记。
一、核心状态机变迁二、词法解析、语法解析、语法树动作。
这部分算是当前WEB服务器比较难的一块,如果理解了这部分的实现机制,基本上理解当前WEB 服务器的代码也就没有什么障碍了,鉴于个人对编译原理也并不了解,这部分也不太容易详细的解释,这里会涉及很大一部分lex、yacc(或GNU flex、GNU bison)工具的使用以及它们的语法编写,所以偷懒一下,仅仅分析针对我们当前项目,利用这些工具及语法文件为我们生成了什么东西,如果对这些机制感兴趣,可以自学这块的技术,再结合当前分析结果,会对WEB服务器整套机制有更清晰的认识。
1、基本原理a、当用户通过浏览器访问WEB服务器,此时WEB服务器通过请求URL了解到用户希望浏览的页面文件名(假设是test.asp),WEB服务器通过文件扩展名知道了用户在请求一个ASP类型的文件,WEB服务器在本地找到该文件并打开,调用语法解析器。
b、语法解析器的实现代码在我们当前项目中是使用yacc(或GNU bison)工具生成,当然前提是需要一个根据当前语法需求编写的一个特定yacc语法文件(比如当前项目为grammar.y),语法解析器的输入对象除了需要yacc语法文件外,还需要调用词法解析器,通常词法解析器可以使用lex (或GNU flex)生成,但当前项目并没有使用lex,而是自己用C代码写了一个词法解析器(gb-lex.c)供语法解析器使用。
c、WEB服务器调用语法解析器时,语法解析器不断调用词法解析器获取标记及标记值,词法解析器通过读取请求URL指定的ASP文件进行分析,找出符合条件的标记及标记值,并提供给语法解析器使用,语法解析器在根据之前用户提供的语法描述进行语法归约,同时对每一个匹配的语法项执行对应的语法动作,这些语法动作创建了一棵关联的语法树。
BOA架构
针对当前MTK WEB机制进行代码分析总结,总体来说当前机制的重点及难点涉及两个部分,一个是请求处理的核心状态机变迁过程,另一个就是ASP动态解析器的实现,这里分为三部分进行描述,分别对核心状态机变迁、ASP词法解析、语法解析、语法树动作的总结,以及当前服务器的源码分析笔记。
一、核心状态机变迁二、词法解析、语法解析、语法树动作。
这部分算是当前WEB服务器比较难的一块,如果理解了这部分的实现机制,基本上理解当前WEB 服务器的代码也就没有什么障碍了,鉴于个人对编译原理也并不了解,这部分也不太容易详细的解释,这里会涉及很大一部分lex、yacc(或GNU flex、GNU bison)工具的使用以及它们的语法编写,所以偷懒一下,仅仅分析针对我们当前项目,利用这些工具及语法文件为我们生成了什么东西,如果对这些机制感兴趣,可以自学这块的技术,再结合当前分析结果,会对WEB服务器整套机制有更清晰的认识。
1、基本原理a、当用户通过浏览器访问WEB服务器,此时WEB服务器通过请求URL了解到用户希望浏览的页面文件名(假设是test.asp),WEB服务器通过文件扩展名知道了用户在请求一个ASP类型的文件,WEB服务器在本地找到该文件并打开,调用语法解析器。
b、语法解析器的实现代码在我们当前项目中是使用yacc(或GNU bison)工具生成,当然前提是需要一个根据当前语法需求编写的一个特定yacc语法文件(比如当前项目为grammar.y),语法解析器的输入对象除了需要yacc语法文件外,还需要调用词法解析器,通常词法解析器可以使用lex (或GNU flex)生成,但当前项目并没有使用lex,而是自己用C代码写了一个词法解析器(gb-lex.c)供语法解析器使用。
c、WEB服务器调用语法解析器时,语法解析器不断调用词法解析器获取标记及标记值,词法解析器通过读取请求URL指定的ASP文件进行分析,找出符合条件的标记及标记值,并提供给语法解析器使用,语法解析器在根据之前用户提供的语法描述进行语法归约,同时对每一个匹配的语法项执行对应的语法动作,这些语法动作创建了一棵关联的语法树。
BOA代码笔记 4
BOA代码笔记4main.c (完?)从上次继续上次我们看到了这个地方:[cpp] view plaincopyprint?if (max_connections < 1){ struct rlimit rl; /* has not been set explicitly */ c = getrlimit(RLIMIT_NOFILE,&rl); if (c < 0){ perror("getrlimit");exit(1); } max_connections =rl.rlim_cur; } /* background ourself */ if (do_fork) { switch(fork()) { case -1:/* error */ perror("fork");exit(1); break; case 0:/* child, success */ break; default: /* parent, success */ exit(0);break; } } /* main loop */ timestamp(); status.requests = 0;status.errors = 0; start_time = current_time;select_loop(server_s); return 0;第一个if块确定最大连接数。
如果未指定,使用getrlimit来获得。
getrlimit(RLIMIT_NOFILE, &rl); specifies a value one greater than the maximum file descriptor number that can be opened by this process.第二个if块,如果do_fork为1,那么我们从子进程运行,父进程结束。
嵌入式学习心得体会(精选8篇)
嵌入式学习心得体会(精选8篇)嵌入式学习心得体会篇1(4622字)从实习到现在搞嵌入式开发快一年了,蓦然回首好像一年过得挺快,挺顺利的。
细细品味,发现这一年还是有很多值得回忆和总结的东西。
至少这一年看书挺多,大概二十几本,当然和那些一年看一百多本书的人没法比,但是我已经超越了自己。
这是我大学毕业的第一年,初次走上社会,很想一展身手,可是.....其实也不用可是了,和很多朋友一样碰了很多钉子,现在我和老板的关系就挺一般的,只是我性格还不错。
呵呵~~,做优秀员工看来还得慢慢学。
今年最大的收获就是做了一个半项目,是在uClinux下面跑的。
半个是SNMP-Agent的实现,因为我去的时候snmpd已经跑起来了,我只是实现部分管理功能;一个是基于Web的管理系统,使公司的主打产品微波通信设备上网。
这个项目是我一手策划,一手实现(界面设计是一位女同事,很优秀的程序员),从中学到的东西也最多,感情不可谓不深。
SNMP即简单网络管理协议,其实一点都不简单。
在我所知的网络协议里面,它仅仅比OSI的CMIP简单一点,而CMIP直到现在还没得到广泛应用。
我们能够实现SNMP-Agent不能不感谢CarnegieMellon大学免费发布的ucd-snmp软件包。
它使得开发人员专注于实现对特定设备的管理功能。
我在项目中的工作主要是扩展MIB,实现相应的管理功能以及网络功能的扩展。
我们公司的MIB库比较庞大,但是程序运行还是挺快的。
因为ucd-snmp软件包中大量使用回调函数,而且它将MIB树以二叉树形式表示,但是每个结点不是单个的MIB结点,而是一个表,包括了多个结点。
回调函数和两层表示法的使用是操作快速的主要因素。
基于Web的管理系统我原本是打算在设备外实现SNMP-Manager 的功能,因为设备中已经嵌入了Agent。
这样管理人员可以在世界各地通过WWW登录公司的管理平台,实现对所有设备的管理。
但是老板想在设备中嵌入一个管理系统,可以通过www管理单个设备就行。
BOA服务器的配置
#避免使用mime.types文件,此时需要用AddType在本文件里指明
MimeTypes /etc/mime.types
#文件扩展名没有或未知的话,使用的缺省MIME类型
DefaultType text/plain
5.#将文件扩展名和MIME类型关联起来,和mime.types文件作用一样。如果用mime.types
/
, 或者
最新发行版本: 0.94.13
下载 boa-0.94.13.tar.gz,注意:从boa上下载的是boa-0.94.13.tar.tar,解压方式一样
2、ScriptAlias的修改 修改 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
为 ScriptAlias /cgi-bin/ /var/www/cgi-bin/
3、ServerName的设置修改 ServerName
.here
第二步 Boa的配置 Boa需要在/etc目录下建立一个boa目录,里面放入Boa的主要配置文件boa.conf。在Boa源码目录下已有一个示例boa.conf,可以在其基础上进行修改。
1、Group的修改 修改 Group nogroup
为 Group 0
由于在/etc/group文件中没有nogroup组,所以设成0。另外在/etc/passwd中有nobody用户,所以User nobody不用修改。
b、 修改 CPP = gcc - E
为 CPP = /usr/local/arm/2.95.3/bin/arm-linux-gcc -E
4、编译 # make
# /usr/local/arm/2.95.3/bin/arm-linux-strip boa
boa搭建Web服务器详细教程
摘要:在详细介绍一种嵌入式Web服务器BOA的实现与配置方法的基础上,以一个Web 在线远程监控GPIO(通用输入/输出)的程序为实例,介绍嵌入式Linux系统下CPU程序设计技术。
关键词:嵌入式系统Linux BOA CGI GPIO1 概述随着互联网应用的普及,越来越多的信息化产品需要接入互联网通过Web页面进行远程访问。
嵌入式Web系统提供了一种经济、实用的互联网嵌入式接入方案。
这里结合一种嵌入式Web Server BOA来介绍嵌入式Linux系统下的CGI程序设计技术。
2 Web Server BOA的实现与配置2.1 uClinux下,主要有三个Web Server:HTTPD、THTTPD和BOA。
HTTPD是最简单的一个Web Server,它的功能最弱,不支持认证,不支持CGI。
THTTPD和BOA都支持认证、CGI等,功能都比较全。
BOA是一个单任务的小型HTTP服务器,源代码开放、性能优秀,特别适合应用在嵌入式系统中。
目前的uClinux的代码中已经包含BOA的源代码。
在uClinux下实现BOA,只需要对BOA做一些配置和修改。
以下是配置的过程。
(1)编译BOA到内核首先,需要把BOA编译到内核,即执行make menuconfig,在应用程序选单中network application项下面选择boa。
该操作需要重新编译内核。
(2)编制配置文件boa.conf在Linux操作系统下,应用程序的配置都是以配置文件的形式提供的,一般都是放在目标板/etc/目录下或者/etc/config目录下。
但boa的配置文件boa.cont一般都旋转在目标板/home/httpd/目录下。
例如,一个典型的boa.conf文件格式如下:ServerName Samsung-ARMDocumentRoot/home/httpdScriptAlias/cgi-bin/home/httpd/cgi-bin/ScriptAlias/index.html/home/httpd/index.html它指定了HTML页面必须放到/home/httpd目录下,cgi外部扩展程序必须放到/home/httpd/cgi-bin目录下。
boa移植笔记
boa移植笔记作者:冯建,华清远见嵌入式学院讲师。
Boa是一个非常小巧的Web服务器,其可执行代码只有60K左右。
它是一个单任务的Web服务器,只能依次完成用户的请求,而不会fork出新的进程处理并发连接请求。
但boa支持cgi,能够为cgi 程序fork出一个进程来执行。
Boa的设计目标是速度和安全,在其站点公布的性能测试中,boa的性能要好于apache 服务器。
随着网络技术的迅猛发展,在嵌入式设备的管理和交互中,基于Web方式的应用成为目前的主流,用户可以直接通过远程登录的方式对设备进行管理和维护,大大方便了使用性。
下面就为大家讲解一下boa服务器在嵌入式Linux系统中的移植过程。
一、BOA服务器移植工具链:gcc version 4.3.2 (crosstool-NG-1.8.1-none)平台:处理器:s3c2410 内核:linux-2.6.351.解压源码tar xvf boa-0.94.13.tar.tarcd boa-0.94.132.进入src/./configure 生成Makefile修改Makefile修改CC =gcc 为CC =arm-none-linux-gnueabi-gcc修改CPP =gcc -E 为CPP =arm-none-linux-gnueabi-gcc -E3.make编译编译一个linux下的c系统,包含词法和语法分析模块,Linux上用bison和flex。
yacc是一个文法分析器的生成器,bison即是yacc的GNU版本.Lex和YACC是用于构造词法分析机和语法解释器的工具,利用Lex 和YACC你可以轻松的构造一个语法解释器。
Apt-get install bison flex执行make然后给boa瘦身Arm-none-linux-gnueabi-strip boa二、Boa服务器配置1、创建目录mkdir /source/rootfs/etc/boa2、将boa源码目录下的boa.conf拷贝到/source/rootfs/etc/boa目录下cp boa.conf /source/rootfs/etc/boa3、修改配置文件boa.confvim /source/rootfs/etc/boa(1)Group的修改修改Group nogroup为Group 0(2)user的修改修改User nobody为User 0(3)ScriptAlias的修改修改ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/为ScriptAlias /cgi-bin/ /www/cgi-bin/(5)DocumentRoot的修改修改DocumentRoot /var/www为DocumentRoot /www(6)ServerName的设置修改#ServerName /doc/2b7299414.html,.here为ServerName /doc/2b7299414.html,.here 否则会出现错误“gethostbyname::No such file or directory”(7)AccessLog修改修改AccessLog /var/log/boa/access_log为#AccessLog /var/log/boa/access_log(8)以下配置和boa.conf的配置有关,都是在ARM根文件系统中创建以下步骤在开发板上进行:创建HTML文档的主目录/wwwmkdir /www创建CGI脚本所在录/www/cgi-binmkdir /www/cgi-bin当不能使用cgi 时将#AddType application/x-httpd-cgi cgi改为AddType application/x-httpd-cgi cgi boa器测试将boa拷贝到开发板根文件系统的/etc/boa下#cp src/boa /source/rootfs/etc/boa将ubuntu下/etc/mime.types拷贝到开发板根文件系统的/etc下#cp /etc/mime.types /source/rootfs/etc将你的主页index.html拷贝到www目录下运行boa,然后在主机游览器输入开发板网址[root@farsight boa]# ./boa[30/10/2011:19:10:36 +0000] [root@farsight boa]# boa: server version Boa/0.94.13[30/10/2011:19:10:36 +0000] boa: server built 10 30 2011 at 19:10:36[30/10/2011:19:10:36 +0000] boa: starting server pid=968, port 80附1):boa配置文件参数说明boa的配置文件是/etc/boa/boa.conf。
web服务器Boa移植手册
Boa服务器的移植可分成两部分,一个是在x86平台上移植,即在虚拟机的linux下,另一个是 在arm平台上移植,即在开发板上的linux下,本手册的前四步,都是在虚拟机上做移植,第五步 是移植到发开板上。
一、编译 boa 程序
1、下载boa-0.94.13.tar.gz。 2、解压 3、#./configure 4、#make 编译会出错: util.c: 100: 1: pasting “t” and “->” does not give a valid preprocessing token make: [util.o] Error1 解决方法,修改compat.h中的 #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff 为: #define TIMEZONE_OFFSET(foo) foo->tm_gmtoff
3
MimeTypes /etc/mime.types 将网页文件放在/var/www 目录下,cgi 脚本放在/var/www/cgi-bin 目录下。在开发板上运行 boa, 在主机 IE 上输入开发板 IP,可看到网页。
六、常见错误
这些错误内容可查看/var/log/boa/error_log 文件 1、gethostbyname:: No such file or directory 解决办法: 修改 boa.conf 去掉 ServerName .here 前的注释符号(#)。 2、util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token make: *** [util.o] 解决办法: 修改 src/compat.h 找到 #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff 修改成 #define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff 3、boa.c:211 - getpwuid: No such file or directory 解决办法: 修改 src/boa.c 注释掉下面这段程序: if (passwdbuf == NULL) { DIE(”getpwuid”); } if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) { DIE(”initgroups”); } 即修改为: #if 0 if (passwdbuf == NULL) { DIE(”getpwuid”); } if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) { DIE(”initgroups”); } #endif 4、boa.c:228 - icky Linux kernel bug!: No such file or directory 解决办法: 修改 src/boa.c 注释掉下面语句: if (setuid(0) != -1) { DIE(”icky Linux kernel bug!”);
移植boa的问题
boa成功移植到S3C2410开发板上ARM-LINUX学习整理交流2009-06-06 16:14:27 阅读277 评论0字号:大中小2009 05 11一:下载源码:/[root@localhost ~]# cd /usr/src[root@localhost src]# tar zxvf boa-0.94.13.tar.tar[root@localhost src]# cd boa-0.94.13[root@localhost boa-0.94.13]# cd src[root@localhost src]# ./configure二:编译前修改的文件:1. 修改Makefile文件,找到CC=gcc和CPP=gcc -E,分别将其改为交叉编译器安装的路径:CC=/usr/local/arm/2.95.3/bin/arm-linux-gccCPP=/usr/local/arm/2.95.3/bin/arm-linux-gcc –E保存退出。
2. 修改编译方式:LDFLAGS = -g –static注: 使用静态编译可以让目标文件自动的包含所需要的库文件,而动态编译需要手工拷贝库文件。
3.修改/src/defines.h文件:#define SERVER_ROOT "/etc/boa"4 修改boa-0.94/src/ util.c文件修改char *get_commonlog_time(void)函数。
time_offset = 0;5. 修改src/config.c:加Current_uid=16. 修改compat.h:把第120 行的#defineTIMEZONE_OFFSET(foo)foo##->tm_gmtoff修改为:#defineTIMEZONE_OFFSET(foo)foo->tm_gmtoff7.修改/src/boa.c,注释掉下面两行:/* if (setuid(0) != -1) {DIE("icky Linux kernel bug!");} *//*if (passwdbuf == NULL) {DIE("getpwuid");}*/8 gethostbyname:: Resource temporarily unavailable这个问题我也遇到过,我只是把src文件夹下的config.c里的if(!server_name){..........}(大概在266行到286行之间)注释掉,就能运行在板子上运行boa,到现在为止没有遇到过是么问题。
嵌入式BOA服务器文档
基于BOA的嵌入式WEB SERVER的设计随着网络技术的不断发展,网络现在已无处不在。
Linux最大的好处在于其良好的网络功能,因此在该系统中,我们通过设计WEB 服务器,使用户能通过浏览器访问设备上的Web服务器来远程控制现场设备。
嵌入式Linux下,系统资源是非常有限的,因此我们选择Web服务器时,要考虑到其资源有限的特点;Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右。
作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。
但Boa支持CGI,能够为CGI程序fork出一个进程来执行,Boa的设计目标是速度和安全。
现在,多数嵌入式Linux的代码中已经包含boa的源代码,在嵌入式Linux下实现Boa 只需要对Boa做一些简单的配置和修改。
这主要通过对boa.conf、boa.c、mime.types等文件进行修改来实现。
服务器中主要包括boa和CGI两部分,其中Boa管理着返回客户端的WEB 页面,而CGI控制着客户端和服务器端的信息交换,所以我们可以通过编写相应的CGI程序来实现所需要的功能。
Boa服务器的实现主要分为两步,boa服务器的移植和CGI程序的设计。
1 、boa 服务器移植Boa服务器的移植主要分为以下步骤进行:(1)首先下载boa源代码,网上有很多关于boa的源码下载网站,官方网址为:/;(2)根据目标平台修改boa的配置文件boa.conf,以及相关的源代码文件boa.c,log.c。
(3)执行configure生成Makefile,并修改Makefile中CC和CPP等项,改成与目标平台对应的编译工具;(4)交叉编译源代码,生成可执行文件boa;(5)拷贝配置文件boa.conf和可执行程序boa到文件系统中。
此时就可以在目标板中运行boa程序了。
下面具体介绍一下如何在ARM平台上移植boa服务器:本系统中采用的boa源码是boa-0.94.13.tar.gz, 将下载的源码拷贝到工作目录解压,# tar xzf boa-0.94.13.tar.gz这里注意下系统中需要安装bison,flex等工具,如果在U-BOOT移植中已经在开发主机中安装过这些工具,则可以跳过这一步骤。
嵌入式WEB服务器BOA的应用研究
而 不 会 创 建 (o k m 新 的 进 程 来 处 理 并 发 连 接 请 求 , fr ) 但
B OA 支 持 C , 且 能 为 CG GI并 I程 序 创 建 出 一 个 新 的 进 程 来 执 行 。B OA 服 务 器 的设 计 目标 是 速 度 快 和 安 全 性 好 , 在 其 站 点 公 布 的性 能 测 试 中 , OA 的性 能 要 好 于 Ap c e B a h 服 务 器 的性 能 。 嵌入式 WE B服 务 器 BOA 和 普 通 WE B服 务 器 一 样 ,
⑦ 去 除 其 中的 调 试 信 息 , 以减 小 文 件 的大 小 。
# a m —i x s rp s lt 3 r l nu - ti qie
4 基 于 O 的数 据 库 访 问技 术 [ GI 4
C ( mmo twa ne fc , 共 网 关 接 口) GICo n Gae y I tra e 公 定
① 从 www. qi . r s l e o g下 载 sl e2 8 1 . a. z源 t qi 一 . . 7 tr g t 码 , 解压 。 并
② 解压 。
# tr~ z fb a 0 9 . 3 t r g a x v o ~ . 4 1 . a . z
③ 进 入 源代 码 目录 。
IEl_ 一w 、 : 嵌服 i务 入器 式 B
图 1 嵌 入 式 WE B服务 器 的工 作 过 程
图 2为 硬 件 系 统 结 构 框 图 。嵌 入 式 WE B服 务 器 采 用
¥ C2 1 3 4 0作 为 整 个 系 统 的 处 理 器 。¥ C2 1 3 4 0是 S ms n a ug 公 司 的 一 款 基 于 ARM9 0 内核 的 1 / 2位 R S 2T 63 I C嵌 入 式
第5章 boa的移植部分
5.2.1 嵌入式web服务器概述 随着嵌入式技术的发展和高速宽带网 络的普及,利用网络实现远程监控已为人 们广泛接受,嵌入式网络监控技术正是在 此条件下逐步发展成熟起来的。
直接采用Internet网络连接嵌入式设备进行 远程监控:必须在嵌入式设备上安装web 服务器,使其支持远程PC或移动终端通过 浏览器来访问该设备。 常见的嵌入式web服务器:boa,httpd和 thttpd。
1. boa简介 Boa 是一款单任务的HTTP 服务器
当有连接请求到来时,它并不为每个连接单独 创建进程,也不通过复制自身进程来处理多链 接, 而是通过建立HTTP 请求列表来处理多路 HTTP 连接请求 同时它只为CGI 程序创建新的进程 在最大程度上节省了系统资源, 这点对嵌入式 系统来讲是至关重要的。
GET方法是通过环境变量QUERY- STRING 传递用户提交的数据。 经过编码的数据以问号打头追加在标识 CGI脚 本地址的URL后一起传给Web服务器。 服务器将其存于QUERY- STRING中,CGI 程 序可以通过getenv( )函数来读取。编码数据除了 表单数据, 还可以是直接调用CGI脚本时追加在 URL地址后面的参数。
POST方法则是通过标准输入( stdin) 传 递 提交数据。 编码了的表单数据独立地传送给Web服务 器,CGI 程序从标准输入中获得,可以用 getchar( ) 、sscanf( ) 、fread( ) 等函数。 要注意的是数据的长度是通过读取环境变 量 CONTENT_LENGTH 获得的,而不是通过 文件尾标识符来判断。
CGI 程序可以用来在web内加入动态的 内容。 通过接口,浏览器能够发送一个可执行 应用程序的HTTP请求,而不仅仅只是静态 的HTML文件。 服务器运行指定的应用程序, 这个应 用程序读取与请求相关的信息,获得请求传 过来的数值。
BOA服务器与CGI程序
新
创 3>.CGI程序
CGI(Common Gateway Interface) 通用网关接口的简称.
风 主要用来处理用户请求,实现用户与服务器之间的交互.
实际上就是一段程序,运行在Server上,提供同客户端 Html页面的接口.
可以用下图来说明:
飓
色
红
服务器提供了客户端(浏览器)和CGI扩展程式之问的信息交换的通道。客户通过浏览器 发出请求,经过服务器的解释发出标准输出传送给CGI,或是说调用CGI程序,CGI对信息 进行处理后,会将结果以标准输出的形式发回,服务器将处理结果以HTML的形式发送给 客户端。 CGI程序可以用多种语言去写,比如Shell Script, C ,VB ,Perl,Fortran等, 但在uClinux下只能用C语言完成. 通常在Web网页中调用CGI程序有三种方法,表单,超链接或是SSI调用. 我们这里主要采用表单的调用方法 .
台 平
3.3 CGI 程序
新
创 由于 CGI 程序是一个外部程序,所以系统要想运行它,
风 首先是 CGI 程序进行编译链接,生成一个可执行文件,存放于 ROMFS 文件夹中,最后与内
核一起生成镜像.
飓 修改位于 /uClinux-dist/user/cgi_generic 下的 CGI 相关程序,
主要修改 cgi.c 和 template.c 下面主要解释其中重要的 C 语句:
风
飓
色
红
Index.html 就是首面,当浏览器访问服务器时,首先显示的页面. 新建一个首页,主要加入可搜集信息的 FORM,则可以根据 FORM 所得到的数据,调用 CGI 程序,实现动态网页的功能. 参考 FORM 表单格式,这个是 Test2 的参考表单:
嵌入式Web服务器BOA实现原理
嵌入式Web服务器BOA实现原理
.嵌入式W eb服务器BOA实现原理
BOA是一款非常小巧的Web服务器,源代码开放、性能优秀、支持CGI通用网关接口技术,特别适合应用在嵌入式系统中。
BOA服务器主要功能是在互联嵌入式设备之间进行信息交互,达到通过网络对嵌入式设备进行监控,并将反馈信息自动上传给主控设备的目的。
它是基于HTTP超文本传输协议的,Web 网页是Web服务最基本的传输单元。
嵌入式Web服务的工作基于客户机/服务器计算模型,由Web浏览器(客户机)和Web服务器(服务器)构成,也即著名的B/S结构。
运行于客户端的浏览器首先要与嵌入式Web 服务器BOA端建立连接,打开一个套接字虚拟文件,此文件建立标志着SOCKET连接建立成功然后客户端浏览器通过套接字SOCKET以GET或者POST参数传递方式向Web服务器提交请求,Web浏览器提交请求后,通过HTTP协议传送给Web服务器。
Web服务器接到请求后,根据请求的不同进行事务处理,返回HTML文件或者通过CGI调用外部应用程序,返回处理结果。
服务器通过CGI与外部应用程序和脚本之间进行交互,根据客户端浏览器在请求时所采用的方法,服务器会搜集客户所提供的信息,并将该部分信息发送给指定的CGI扩展程序,CGI扩展程序进行信息处理并将结果返回给服务器,然后服务器对信息进行分析,并将结果发送回客户端在浏览器上显示出来。
BOA_流程分析
影响功能: ASP/PHP/JSP/Perl/... 等的 header, redirect, ... 等都会应用到 Stauts/Location 进行设置 应答状态和 地址重定向. Boa 的该实现将影响 CGI 脚本正常功能的使用. 缺陷功能对比(对 Status/Location 的支持程序): Apache 1.3.x/2.x IIS 4.x/5.x/6.X mini-httpd 完全支持 完全支持 完全支持 完全支持
当在任意用户端浏览器中输入目标板的 IP 地址及对应的文件名后,就会显 示如图 6 所示界面。 其中在地址栏中输入的路径已经按照本文之前的方法被 Boa 服务器修改,实际路径为:http://192.168.0.1/cgi-bin/qs2.cgi。因此 用户无法找到源文件, 减小了被恶意用户攻击的可能性。 图 5 中选中单选框和添 加文本框内容这些操作都是经过 CGI 程序替换显示的配置文件中的内容。 修改这 些内容后点击下一步程序会自动保存到配置文件中, 下一次再进入页面后就会显 示上一次保存的结果。
Boa Web Server 缺陷报告及其修正方法
2010-03-30 13:33119人阅读评论(0)收藏举报
综述 Boa 作为一种轻巧实用的 WEB 服务器广泛应用于嵌入式设备上, 但 Boa 对实现动态网页的 CGI 的支持上仍存在一些缺陷, 本文描述了 Boa 对 CGI 的 Status/Location 的支持的缺陷及其修正方法.
2.2 init_get 函数工作流程 图 2 为 处 理 静 态 页 面 请 求 的 init_get() 函 数 的 基 本 工 作 流 程 。 图 2 中 process_get()函数完成的功能为将 request 结构中的 data_men 字符串返回套接字 并在用户浏览器上显示相应的内容。
boa解析get请求带的参数
Boa解析Get请求带的参数一、概述在网络编程中,经常会遇到需要解析Get请求带的参数的情况。
Get 请求是HTTP协议中的一种请求方式,通过URL传递参数。
而Boa是一种高性能的嵌入式Web服务器,用于嵌入式设备上的Web应用开发。
本文将探讨Boa如何解析Get请求带的参数,以及相关的使用技巧和注意事项。
二、Boa解析Get请求带的参数的方法1. 使用Boa的内置函数解析URLBoa提供了内置函数来解析URL和参数,开发者可以使用这些函数来方便地获取Get请求中的参数。
通过以下代码示例,我们可以看到Boa提供了如何解析URL的方法:```cchar *url_decode(const char *src, char *dst, int max){char *p = dst;char c;int count = 0;while (*src count < max){if (*src == '+'){*p++ = ' ';src++;count++;}else if (*src == ''){sscanf(src + 1, "2x", c); *p++ = c;src += 3;count++;}else{*p++ = *src++;count++;}}*p = 0;return dst;}```通过调用url_decode函数,可以将URL参数解析成普通字符串,便于后续处理。
另外,Boa还提供了其他一些相关的内置函数,可以帮助开发者更方便地处理Get请求中的参数。
2. 手动解析URL除了使用Boa提供的内置函数外,开发者还可以手动解析URL,从而获取Get请求中的参数。
通常,URL的格式为“xxx”,其中“?”后面的部分就是参数部分。
开发者可以通过搜索特定字符(如“”和“=”)来解析URL,并获取参数的值。
三、使用技巧和注意事项1. 编码转换在获取Get请求中的参数后,开发者经常需要对参数的内容进行编码转换。
BOA CGI 技术简介
嵌入式Linux操作系统CGI程序设计技术1概述随着互联网应用的普及,越来越多的信息化产品需要接入互联网通过Web页面进行远程访问。
嵌入式Web系统提供了一种经济、实用的互联网嵌入式接入方案。
这里结合一种嵌入式Web Server BOA来介绍嵌入式Linux系统下的CGI程序设计技术。
2Web Server BOA的实现与配置2.1uClinux下,主要有三个Web Server:HTTPD、THTTPD和BOA.HTTPD是最简单的一个Web Server,它的功能最弱,不支持认证,不支持CGI.THTTPD 和BOA都支持认证、CGI等,功能都比较全。
BOA是一个单任务的小型HTTP服务器,源代码开放、性能优秀,特别适合应用在嵌入式系统中。
目前的uClinux的代码中已经包含BOA的源代码。
在uClinux下实现BOA,只需要对BOA做一些配置和修改。
以下是配置的过程。
(1)编译BOA到内核首先,需要把BOA编译到内核,即执行make menuconfig,在应用程序选单中network application项下面选择boa.该操作需要重新编译内核。
(2)编制配置文件boa.conf在Linux操作系统下,应用程序的配置都是以配置文件的形式提供的,一般都是放在目标板/etc/目录下或者/etc/config目录下。
但boa的配置文件boa.cont一般都旋转在目标板/home/httpd/目录下。
例如,一个典型的boa.conf文件格式如下:它指定了HTML页面必须放到/home/httpd目录下,cgi外部扩展程序必须放到/home/httpd/cgi-bin目录下。
(3)编译烧写内核重新编译内核后,通过烧写工具烧写内核,就可以在PC上通过IE浏览器访问开发板上的Web Server.例如,输入开发板的IP地址http://192.168.0.101/,即可访问到自己做的网页index.html了。
Ubuntu 配置 boa 服务器
Ubuntu 配置boa 服务器Ubuntu上编译用法boa服务器的教程文章,已经有无数了,博客上也有无数人写了,我就不赘述了,在这里贴出几处初次用法boa的伴侣可能碰到的问题执行 boa 检查 error_log 里面的内容,有如下错误:boa.c:194 - unable to bind: Aress already in use 由于是在pc 机上,默认的boa.conf 里面Port的端口设置为 80,因此运行 boa 时会有如上错误,可以在 error_log文件里面查看到解决方法:修改boa.conf 里面的 port 值为 8080(可指定其它未被用法的)保存即可。
再次尝试,扫瞄器地址栏里输入:192.168.1.111:8080后,www 名目下的 ind.html 拜访正常接下来测试cgi程序:扫瞄器地址栏里输入:192.168.1.111:8080/cgi-bin/test.cgi 有可能碰到 bad gateway 的错误,或者在error_log里面提醒: request from192.168.1.119 "GET /favicon.ico HTTP/1.1"("/var/www/favicon.ico"): document open: No ch or directory [01/Aug/2011:10:04:37 +0000] request from 192.168.1.119 "(null)" ("(null)"): header read: Connection -9 p(boa)重新启动boa,再次通过扫瞄器拜访cgi,拜访胜利!注:做嵌入式开发板上的boa移植时,这里的确如无数博友写的,修改 User 及 Group 后面的参数为 0,可是初次在Ubuntu里面用法boa的伴侣可能就忽视了这个。
boa算法原理
Boa算法原理解析概述Boa算法是一种基于MapReduce的大数据挖掘算法,旨在高效地处理和分析包含大量图数据的大型计算机网络。
该算法将计算机网络中的通信以图的形式进行建模,并使用关联规则挖掘技术来发现具有潜在威胁性的网络行为。
通过Boa算法,可以快速发现网络中的异常行为、恶意攻击和不安全的配置,从而提高网络安全性。
Boa算法原理Boa算法的核心思想是将计算机网络视为一个有向图,其中图的节点代表网络中的主机、服务器或路由器,图的边代表它们之间的通信关系。
通过对这个图进行分析,可以找到网络中的威胁和攻击行为。
Boa算法主要包含以下几个步骤:1. 数据预处理首先,需要对收集的原始数据进行预处理,以便将其转化为适合于Boa算法的数据格式。
预处理步骤包括数据清洗、数据格式转换和数据聚合。
数据清洗主要是去除不完整、重复或错误的数据;数据格式转换是将原始数据转化为图数据结构;数据聚合是将具有相同通信关系的数据合并到一起。
2. 图构建在图构建过程中,根据网络通信记录数据,可以将每个计算机节点作为图中的一个节点,并使用边连接之间存在通信关系的节点。
边的权重可以根据通信的频率、数据量或其他特征进行设置。
3. 关联规则挖掘关联规则挖掘是Boa算法的核心步骤。
这一步骤使用Apriori算法或FP-growth算法等经典的关联规则挖掘算法来发现网络中存在的威胁和攻击行为。
关联规则挖掘可以发现频繁项集和关联规则,从中提取有价值的信息。
4. 威胁识别通过关联规则挖掘,可以得到一系列与网络安全相关的关联规则。
根据这些规则,可以识别出潜在的威胁和攻击行为。
例如,如果某个关联规则表明两个节点之间的数据传输异常频繁,可能存在数据泄露或拒绝服务攻击。
5. 结果展示与分析最后,Boa算法可以将威胁识别结果以可视化的形式展示给用户,以便于分析和进一步的决策制定。
通过结果展示与分析,用户可以对网络安全进行监控和调整,提高网络安全性。
Boa算法优势Boa算法具有以下几个优势:1. 高效处理大规模网络数据Boa算法基于MapReduce模型,可以有效地处理大规模网络数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[2410]搭建boa服务器
2008-08-21 09:32
由于我使用cramfs文件系统,只读,设置稍微有点不同
我把网页和错误日志文件都放在了u盘的挂载目录mnt中,不过这样很方便!安装过程
==========================================================
1)在下载boa-0.94.13.tar.gz 并解压
2)在src目录下运行./configure
3)生成Makefile文件,修改
CC = arm-linux-gcc
CPP = arm-linux-gcc–E
将boa.c文件中以下几行判断去掉即可。
修改文件compat.h
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
修改成
#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff
4)make
5)执行arm-linux-strip boa
去掉调试信息,小很多,50多k
可以编译出boa可执行文件,下面是对文件系统的修改
(1)建立/etc/boa/boa.conf 可以从boa源码里拷贝boa.conf
(2)修改boa.conf文件,以下为转载
**********************************************************
#监听的端口号,缺省都是80,一般无需修改
Port 80
# bind调用的IP地址,一般注释掉,表明绑定到INADDR_ANY,通配于服务器的所有IP地址
#Listen 192.68.0.5
User 0
Group 0
#当服务器发生问题时发送报警的email地址,目前未用,注释掉
#ServerAdmin root@localhost
#错误日志文件。
如果没有以/开始,则表示从服务器的根路径开始。
如果不需要错误日志,则用#/dev/null。
在下面设置时,注意一定要建立/var/log/boa目录
ErrorLog /mnt/log/boa/error_log
#访问日志文件。
如果没有以/开始,则表示从服务器的根路径开始。
如果不需要错误日志,则用#/dev/null或直接注释掉。
在下面设置时,注意一定要建立
/var/log/boa目录
#AccessLog /var/log/boa/access_log
#是否使用本地时间。
如果没有注释掉,则使用本地时间。
注释掉则使用UTC时间
#UseLocaltime
#是否记录CGI运行信息,如果没有注释掉,则记录,注释掉则不记录
#VerboseCGILogs
#服务器名字
ServerName
#是否启动虚拟主机功能,即设备可以有多个网络接口,每个接口都可以拥有一个虚拟的Web服
#务器。
一般注释掉,即不需要启动
#VirtualHost
#非常重要,HTML文档的主目录。
如果没有以/开始,则表示从服务器的根路径开始。
DocumentRoot /var/www
#如果收到一个用户请求的话,在用户主目录后再增加的目录名
UserDir public_html
#HTML目录索引的文件名,也是没有用户只指明访问目录时返回的文件名DirectoryIndex index.html
#当HTML目录没有索引文件时,用户只指明访问目录时,boa会调用该程序生成索引文件然后
#返回给用户,因为该过程比较慢最好不执行,可以注释掉或者给每个HTML目录
加上#DirectoryIndex指明的文件
#DirectoryMaker /usr/lib/boa/boa_indexer
#如果DirectoryIndex不存在,并且DirectoryMaker被注释,那么就用Boa自带的索引
#生成程序来生成目录的索引文件并输出到下面目录,该目录必须是Boa能读写# DirectoryCache /var/spool/boa/dircache
#一个连接所允许的HTTP持续作用请求最大数目,注释或设为0都将关闭HTTP 持续作用
KeepAliveMax 1000
#HTTP持续作用中服务器在两次请求之间等待的时间数,以秒为单位,超时将关闭连接
KeepAliveTimeout 10
#指明mime.types文件位置。
如果没有以/开始,则表示从服务器的根路径开始。
可以注释掉
#避免使用mime.types文件,此时需要用AddType在本文件里指明
MimeTypes /etc/mime.types
#文件扩展名没有或未知的话,使用的缺省MIME类型
DefaultType text/plain
#提供CGI程序的PATH环境变量值
CGIPath /bin:/usr/bin:/usr/local/bin
#将文件扩展名和MIME类型关联起来,和mime.types文件作用一样。
如果用mime.types
#文件,则注释掉,如果不使用mime.types文件,则必须使用
#AddType application/x-httpd-cgi cgi
#指明文档重定向路径
#Redirect /bar http://elsewhere/feh/bar
#为路径加上别名
Alias /doc /usr/doc
#非常重要,指明CGI脚本的虚拟路径对应的实际路径。
一般所有的CGI脚本都要放在实际路径
#里,用户访问执行时输入站点+虚拟路径+CGI脚本名
ScriptAlias /cgi-bin/ /mnt/www/cgi-bin/
用户可以根据自己需要,对boa.conf进行修改,但必须要保证其他的辅助文件和设置必须和boa.conf里的配置相符,不然Boa就不能正常工作。
在上面的例子中,我们还需要创建日志文件所在目录/mnt/log/boa,创建HTML文档的主目录/mnt/www,将mime.types文件拷贝到/etc目录,创建CGI脚本所在目录/var/mnt/cgi-bin/。
mime.types文件用来指明不同文件扩展名对应的MIME 类型,一般可以直接从Linux主机上拷贝一个,大部分也都是在主机的/etc目录下。
**********************************************************
我做的修改
DocumentRoot /mnt/www 优盘目录下的www目录,需手动建立
ErrorLog /mnt/log/boa/error_log 优盘目录下的log目录,需手动建立
ScriptAlias /cgi-bin/ /mnt/www/cgi-bin/ 优盘目录下的
www/cgi-bin目录,需手动建立
(3)etc目录里还要有passwd group mime.types等文件
www目录放index.html文件
(4)在板子上运行boa
(5)pc机用IE访问http://192.168.3.223/index.html
ip是板子的ip
成功显示
Error:
./boa
gethostbyname:: Resource temporarily unavailable
把src文件夹下的config.c里的if(!server_name){..........}(大概在266行到286行之间)注释掉,就能运行在板子上运行boa,到现在为止没有遇到过是么问题。
但不知道以后会不会有问题。
改变板子的属性:执行一个命令就可以变成可写的好象是rtrw 自动启动boa:在/etc/profile中启动boa即可。