《信息安全系统设计基础》实验五实验报告
课程:信息安全系统设计基础
姓名: 20145206 邹京儒 20145236冯佳
班级:1452
指导教师:娄嘉鹏
实验日期:2016.11.10
实验名称: 简单嵌入式WEB服务器实验
实验目的与要求:
-
学习使用 socket 进行通讯编程的过程,了解一个实际的网络通讯应用程序整体设计,阅读HTTP 协议的相关内容,学习几个重要的网络函数的使用方法。
-
读懂HTTPD.C 源代码。在此基础上增加一些其他功能。在PC 计算机上使用浏览器测试 嵌入式WEB 服务器的功能。
-
(要求)正确使用连接线等实验仪器,并注意保护实验箱。实验结束之后将实验箱送回。
实验内容、步骤与体会:
一、实验内容
(同实验一)本次实验建立在掌握嵌入式开发平台使用方法和配置方法的基础上,要求使用windows xp,linux(red hat),arm三个系统(即NFS方式);在linux系统中安装arm系统。
二、实验原理
1.该WEB服务器能实现的功能?
获取服务器当前目录文件列表、获取指定文件、获取HTML类型文件、获取纯文本文件、获取JPG图像文件、获取GIF图像文件。
2.HTTP协议数据头格式要求
1)请求格式:
请求行-通用信息头-请求头-实体头-报文主体
2)响应格式:
状态行-通用信息头-响应头-实体头-报文主体
3.为何采用SOCKET?
SOCKET用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。
4.代码理解
1)解析客户请求:int ParseReq(FILE *f, char *r)
char *r
:字符串指针,待解析的字符串。
2)发送 HTTP协议数据头:int PrintHeader(FILE *f, int content_type)
int content_type
:信息类型,用于确定发送的 HTTP 协议数据头信息
3)发送当前目录文件列表信息:int DoDir(FILE *f, char *name)
char *name
:目录名,表示客户请求的目录信息。
4)发送 HTML文件内容:int DoHTML(FILE *f, char *name)
char *name
:客户请求的文件名
5)发送纯文本(TXT)文件内容:int DoText(FILE *f, char *name)
char *name
:客户请求的文件名
6)发送 JPEG图像文件内容:int DoJpeg(FILE *f, char *name)
char *name
:客户请求的文件名
7)发送 GIF图像文件内容:int DoGif(FILE *f, char *name)
char *name
:客户请求的文件名
三、实验过程
1.配置实验箱
- 同实验一中一样,配置实验环境
- 连接arm开发板;
- 建立超级终端;
- 启动实验平台;
- 修改windows xp系统的ip使得它与arm机的ip在同一网段;
- 在red hat中安装arm编译器;
- 配置环境变量。
2.进入07_hpptd文件夹中,尝试直接make进行自动编译。出现如下图所示的错误。
3.如上图中所示,为了解决httpd未能自动编译的问题,对hpptd.c文件进行手动多线程编译。
4.使用 NFS 服务方式将HTTPD 下载到开发板上,并拷贝测试用的网页进行调试。
[/mnt/yaffs] mount -t nfs -o nolock 192.168.0.56:/arm2410cl /host
[/mnt/yaffs]cd /host/exp/basic/07_httpd/
[/host/exp/basic/07_httpd]./httpd
(结果)starting httpd...
press q to quit.
wait for connection.
5.在台式机的浏览器中输入 http://192.168.0.121(121 为UP-CUP S2410 实验板的IP地址),观察在客户机的浏览器中的连接请求结果(如下图)。
四、实验中遇到的问题及解决
- 虽然将07_httpd文件中全部拷贝进了bc中,文件夹中拥有Makefile文件,但是还是无法通过make得到该文件夹中copy和httpd的可执行文件。
解决:第一次是觉得Makefile文件中的PATH路径不对,将其改成了/home/bc/07_httpd存盘退出后发现还是无法执行,第二次我们直接使用gcc对其单步进行编译:
armv4l-unknow-linux-gcc –E copy.c –o copy.i
armv4l-unknow-linux-gcc –S copy.i –o copy.s
armv4l-unknow-linux-gcc –c copy.s –o copy.o
对于httpd的编译方式同上。
Make——工程管理器,为了减少重复工作量,“自动编译管理器”,“自动”在于它能根据文件时间戳自动发现更新过的文件而减少编译工作量,同时它通过读入makefile文件的内容来执行大量的编译工作。用户只需要编写一次简答的编译语句就可以了,也就是说以后只要敲入make即可编译全部文件,它大大提高了实际项目的工作效率,几乎所有linux下的项目编程都需要用到它。 - make时出现
error127
。
解决:找到了原因,环境变量配置出现问题,是拷代码时没有将一个Rules.mak的MAK类型文件一起拷过来,导致make命令不能使用,重新配置后则正常make。 - 在将httpd服务下载到开发板上这一步骤中,挂载超级终端与共享文件建立通讯时,输
mount -t nfs -o nolock 192.168.0.234:/root/bc /hos
时,提No such file or director
错误提示。
解决方法:再次查看共享文件目录,确定我们并不存在/root/home/bc这一目录,将命令行修改mount -t nfs -o nolock 192.168.0.234:/home/bc /hos
即可解决所提示错误。