信息安全系统设计基础实验五:通讯协议设计 20135211李行之 20135216刘蔚然

北京电子科技学院(BESTI)

实 验 报 告


封面

课程:信息安全系统设计基础

班级:1352

姓名:(按贡献大小排名)李行之 刘蔚然

学号:(按贡献大小排名)20135211 20135216

成绩

指导教师:娄嘉鹏

实验日期:2015.12.1

实验密级

预习程度

实验时间:15:30—17:30

仪器组次:11

必修/选修:必修

实验序号:5

实验名称: 通讯协议设计

实验目的与要求:  1.学习使用 socket 进行通讯编程的过程,了解一个实际的网络通讯应用程序整体设计,阅读HTTP 协议的相关内容,学习几个重要的网络函数的使用方法。 2.读懂HTTPD.C 源代码。在此基础上增加一些其他功能。在PC 计算机上使用浏览器测试 嵌入式WEB 服务器的功能。 3.(要求)正确使用连接线等实验仪器,并注意保护实验箱。实验结束之后将实验箱送回。

实验仪器

  • (名称) (型号) (数量)
  • 嵌入式开发平台 UP-NETARM2410-CL 1
  • PC机 1

正文(个人理解部分由【】标出)

一、实验内容:

(同实验一)本次实验建立在掌握嵌入式开发平台使用方法和配置方法的基础上,要求使用windows xp,linux(red hat),arm三个系统(即NFS方式);在linux系统中安装arm系统。

二、实验原理

  • 总体说明:建立 TCP 类型SOCKET 在80 端口进行监听连接请求。接收到连接请求,将请 求传送给连接处理模块处理。并继续进行监听。
  • 原理图

(图1,2)

  • 模块设计

    • 客户连接处理模块:用于初步处理客户的连接请求,并将请求信息传递给客户请求解析函数处理。
    • 客户请求解析处理模块:用于解析客户的请求,并根据请求信息调用相应的函数进行请求处理
    • 发送HTTP 协议数据头模块:根据参数的不同,发送不同的 HTTP 协议头信息。
  • 主要函数

copy.c

#include <stdio.h>
static char copybuf[16384];
extern int TIMEOUT;

int copy(FILE *read_f, FILE *write_f)//完成从一个文件到另一个文件的字符复制
{
    int n;
    int wrote;
    alarm(TIMEOUT);
    while (n = fread(copybuf,1,sizeof(copybuf),read_f)) {
    alarm(TIMEOUT);
    wrote = fwrite(copybuf,n,1,write_f);
    alarm(TIMEOUT);
    if (wrote < 1)
        return -1;
    }
    alarm(0);//清空之前的闹钟
    return 0;
}

【解释】

在网上查找了alarm函数的含义之后得到如下说明————alarm函数又被称为闹钟函数,alarm()用来设置信号AIGALRM经过seconds(参数)指定的秒数之后传送给目前的进程。需要注意的有两个地方:一个进程只能由一个闹钟时间,如果在调用alarm之前已经设置过闹钟时间,那么任何以前的闹钟都会被新闹钟取代;如果参数seconds设置为0,那么之前的闹钟会被取消。

httpd.c(只摘取了main函数的代码)

int main(int argc, char *argv[])
{
  int fd, s;
  int len;
  volatile int true = 1;
  struct sockaddr_in ec;
  struct sockaddr_in server_sockaddr;

  pthread_t th_key;
  void * retval;

  /*第一步,进行(中断)信号的处理*/
  signal(SIGCHLD, SIG_IGN);//见1
  signal(SIGPIPE, SIG_IGN);
  signal(SIGALRM, sigalrm);

  /*切换工作目录*/
  chroot(HTTPD_DOCUMENT_ROOT);//见2
  printf("starting httpd...\n");
  printf("press q to quit.\n");
//  chdir("/");

  /*第二步,输入命令并进行处理*/
  if (argc > 1 && !strcmp(argv[1], "-i")) {
/* I‘m running from inetd, handle the request on stdin */
fclose(stderr);
HandleConnect(0);//调用之前定义的函数,见3
exit(0);
  }

  /*第三步,建立socket接口*/
  if((s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) {
perror("Unable to obtain network");
exit(1);
  }

  if((setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void *)&true,
         sizeof(true))) == -1) {
perror("setsockopt failed");
exit(1);
  }

  /*定义server_sockaddr结构体中的内容*/
  server_sockaddr.sin_family = AF_INET;
  server_sockaddr.sin_port = htons(SERVER_PORT);
  server_sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);

  /*第四步,对端口和地址进行绑定*/
  if(bind(s, (struct sockaddr *)&server_sockaddr,
      sizeof(server_sockaddr)) == -1)  {
perror("Unable to bind socket");
exit(1);
  }

  /*第五步,监听端口*/
  if(listen(s, 8*3) == -1) { /* Arbitrary, 8 files/page, 3 clients */
perror("Unable to listen");
exit(4);
  }

    /*第六步,多线程创建,等待连接*/
    pthread_create(&th_key, NULL, key, 0);
  /* Wait until producer and consumer finish. */
  printf("wait for connection.\n");
  while (1) {

len = sizeof(ec);

/*第七步,接收客户端连接请求*/
if((fd = accept(s, (void *)&ec, &len)) == -1) {
  exit(5);
  close(s);
}
HandleConnect(fd);

  }

  /*第八步,等待线程连接结束之后再结束main函数*/
  pthread_join(th_key, &retval);
}

【1.signal(XX,XX)函数】

signal(参数1,参数2);参数1:我们要进行处理的信号。其实这些信号时系统定义的宏。参数2:我们处理的方式(是系统默认还是忽略还是捕获)。针对本代码中的三次调用中的参数,解释如下:

  • SIGIGN——这个符号表示忽略该信号,执行了相应的signal()调用后,进程会忽略类型为sig的信号
  • SIGCHLD——进程Terminate或Stop的时候,SIGCHLD会发送给它的父进程。
  • SIGPIPE——在reader中止之后写Pipe的时候发送。
  • SIGALRM——用alarm函数设置的timer超时或setitimer函数设置的interval timer超时
  • sigalrm——与上述参数不同的是,它是一个处理SIGALRM的函数.在代码291行有定义

【2.chroot()函数】

chroot()用来改变根目录为参数path 所指定的目录。只有超级用户才允许改变根目录,子进程将继承新的根目录。同时,它也会切换工作目录到新的目录。

【3.handleconnect(XX,XX)函数】

该函数的代码整体比较容易理解,核心在于304行的f = fdopen(fd,"a+");一句。通过查阅,fdopen函数取一个现存的文件描述符,并使一个标准的I / O流与该描述符相结合。参数“a+”表示 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。这样一来,该函数的作用就很明显了,就是将标准输入(因为传进来的参数是0)中的内容进行读取。

三、实验过程

1.配置实验箱

  • 同实验一中一样,配置实验环境

    • 连接arm开发板;
    • 建立超级终端;
    • 启动实验平台;
    • 修改windows xp系统的ip使得它与arm机的ip在同一网段;
    • 在red hat中安装arm编译器;
    • 配置环境变量。

2.进入07_hpptd文件夹中,尝试直接make进行自动编译。出现如下图所示的错误。

(图3)

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地址),观察在客户机的浏览器中的连接请求结果(如下图)。

(图4)

四、总结

本次实验建立在实验四搭建好的实验平台基础上;而且,有了实验四中针对利用make进行自动编译的问题处理经验,本次实验进行得十分顺利。

时间: 2024-10-23 11:02:11

信息安全系统设计基础实验五:通讯协议设计 20135211李行之 20135216刘蔚然的相关文章

信息安全系统设计基础实验五:通讯协议设计

北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:52.53 姓名:王思亓 赵阳林 学号:20135205 20135334 成绩: 指导教师:娄嘉鹏 实验日期:2015.11.24 实验密级: 预习程度: 实验时间:15:30—18:00 仪器组次: 必修/选修:必修 实验序号: 实验名称:通讯协议设计 实验目的与要求:1.掌握在ARM开发板实现一个简单的WEB服务器的过程.2.学习在ARM开发板上的SOCKET网络编程.3.学习Linux下的signal()函

实验二-固件设计 20135211李行之 20135216刘蔚然

北京电子科技学院(BESTI) 实 验 报 告 封面 课程:信息安全系统设计基础                               班级:1352                                                   姓名:(按贡献大小排名)李行之 刘蔚然 学号:(按贡献大小排名)20135211 20135216                   成绩:                     指导教师:娄嘉鹏                 实验日期

实验三-实时系统的移植 20135211李行之 20135216刘蔚然

北京电子科技学院(BESTI) 实 验 报 告 封面 课程:信息安全系统设计基础                                    班级:1352                                            姓名:(按贡献大小排名)李行之 刘蔚然 学号:(按贡献大小排名)20135211 20135216                        成绩:                      指导教师:娄嘉鹏                

# 2017-2018-1 20155318 《信息安全系统设计基础》 实验五 通讯协议设计

2017-2018-1 20155318 <信息安全系统设计基础> 实验五 通讯协议设计 Linux下OpenSSL的安装与测试 任务要求:在Ubuntu中完成 http://www.cnblogs.com/rocedu/p/5087623.html 中的作业 OpenSSL简介 OpenSSL是一个SSL协议的开源实现,采用C语言作为开发语言,具备了跨平台的能力,支持Unix/Linux.Windows.Mac OS等多种平台. OpenSSL整个软件包大概可以分成三个主要的功能部分: 密码

2017-2018-1 20155317《信息安全系统设计基础》 实验五 通讯协议设计

2017-2018-1 20155317<信息安全系统设计基础> 实验五 通讯协议设计 实验要求 任务 安装OpenSSL环境,并编写测试代码验证无误研究OpenSSL算法,测试对称算法中的AES,非对称算法中的RSA,Hash算法中的MD5在Ubuntu中实现对实验二中的"wc服务器"通过混合密码系统进行防护 1.安装OpenSSL环境,并编写测试代码验证无误 实验步骤: $ ./config $ make $ make test $ make install 进行测试,

2017-2018-1 20155333 《信息安全系统设计基础》实验五通讯协议设计

2017-2018-1 20155333 <信息安全系统设计基础>实验五通讯协议设计 实验五 通讯协议设计-1 要求 在Ubuntu中完成 http://www.cnblogs.com/rocedu/p/5087623.html 中的作业 提交运行结果截图 OpenSSL简介 OpenSSL是一个SSL协议的开源实现,采用C语言作为开发语言,具备了跨平台的能力,支持Unix/Linux.Windows.Mac OS等多种平台. OpenSSL最早的版本在1995年发布,1998年后开始由Ope

2017-2018-1 20155314《信息安全系统设计基础》实验五 通讯协议设计

2017-2018-1 20155314<信息安全系统设计基础>实验五 通讯协议设计 通讯协议设计-1 实验要求 在Ubuntu中完成 http://www.cnblogs.com/rocedu/p/5087623.html 中的作业 提交运行结果截图 运行结果 通讯协议设计-2 实验要求 在Ubuntu中实现对实验二中的"wc服务器"通过混合密码系统进行防护 提交测试截图 通讯协议设计-3 实验要求 运行实验箱中,ARM调用Z32算法的实验,提交实验截图 用Z32的国密算

2017-2018-1 20155223 实验五 通讯协议设计

2017-2018-1 20155223 实验五 通讯协议设计 什么是OpenSSL? OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法.常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用. SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输.Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准.其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持

2017-2018-1 20155232 实验五 通讯协议设计

2017-2018-1 20155232 实验五 通讯协议设计 Linux下OpenSSL的安装与使用 OpenSSL简介 OpenSSL是一个SSL协议的开源实现,采用C语言作为开发语言,具备了跨平台的能力,支持Unix/Linux.Windows.Mac OS等多种平台. OpenSSL最早的版本在1995年发布,1998年后开始由OpenSSL项目组维护和开发.当前最新的版本是1.1.0 alpha版本,完全实现了对SSLv1.SSLv2.SSLv3和TLS的支持..目前,OpenSSL已