基于Python实现网络安全传输系统

文件传输系统报告 实验目的 ​ 在当下的大数据和人工智能时代,数据的重要性已经愈来愈重要,但是文件作为数据在计算机系统中的重要载体,在网络传输的过程中容易被监听嗅探

本文包含相关资料包-----> 点击直达获取<-------

文件传输系统报告

实验目的

​ 在当下的大数据和人工智能时代,数据的重要性已经愈来愈重要。但是文件作为数据在计算机系统中的重要载体,在网络传输的过程中容易被监听嗅探,导致隐私泄露问题,因此文件传输安全的保障也是数据安全中重要的一部分。

​ 本实验我们将学习 socket 编程,从传输层开始动手设计一个简单的文件安全传输系统。本实验涉及到简单的应用层协议设计,socket C/S 程序实现,SSL 安全传输协议,多线程技术,以及网络通信流量的嗅探与分析。

一、完成的工作

证书的签发

  • 使用 OpenSSL 生成 CA 根证书
  • 使用 OpenSSL 生成服务器私钥及待签名证书,并使用 CA 根证书对其签名
  • 使用 OpenSSL 生成客户端私钥及待签名证书,并使用 CA 根证书对其签名

自定义传输协议

  • 客户端包头
  • 服务端包头

文件传输系统客户端

  • 用户注册、登录
  • 文件浏览、下载
  • 文件上传
  • 可选 使用/不使用 SSL 加密传输
  • GUI 图像界面

文件传输系统服务端

  • 响应用户注册、登录
  • 响应用户上传、下载
  • 多线程
  • 记录用户操作日志

Wireshark 抓包分析

  • SSl 加密
  • 不使用 SSL 加密

二、程序运行环境

注:本系统服务器没有部署在云端,需在本地启动执行

操作系统:Win10 编程语言:Python3.6 依赖 Python 库:tkinter、pymysql、ssl、socket 等(大多均为 Python 内置) MySQL 中应先建立数据库:filetransfer,新建表 user,含有三个字段:id、username、 password

启动方法:

启动服务器:

c++ python server_ssl.py python server_no_ssl.py

启动客户端:

c++ python main.py

文件夹说明请参考 README.md 文件

三、系统框架

客户端流程图

1

服务器流程图

2

自定义传输协议在服务器与客户端的每次交流都添加了自定义报头,客户端主动向服务器请求数据,

服务器被动返回,因此两者的数据包头会不同。本系统使用了 python 的 struct 结构体实现了报头二进制流的传输。

3.1 客户端的报头内容如下:(1024 字节)

  • Command 包括:Download、Upload、Update、Login 和 Register
  • Filename 在 download 指令下是要下载的文件名,在 upload 模式下是本地上传文件的路径。
  • Filesize 是文件的大小
  • Time 是数据请求的时间
  • User 和 password 是用户名和密码,每次请求数据都会验证一次,模拟 Cookie 模式。

c++ header = { 'Command': 'Download' , 'fileName': filename, 'fileSize': '' , 'time': time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), 'user': self.username, 'password': self.password, }

服务器的报头内容如下:

(128 字节)由于服务器是被动地回复客户端,所以报头内容不需要太多,故使用 128 字节。

  • Feedback 指示要回应的指令
  • Stat 指示响应的状态(如注册、登录等)
  • Filesize 是文件的大小 User 是当前用户

c++ header = { 'Feedback': 'Login' , 'stat': 'Success' , 'fileSize': os.stat(listResult).st_size, 'user': username }

四、效果展示

登录界面可选择使用或不使用 SSL 加密

3

注册界面

4

下载

下载路径为项目文件夹下的 ClientDownload,下载采用多线程,点击确认后会后台下载,不影响当前页面操作。

5

6

7

上传

上传同样采用多线程,不会影响当前界面的操作。上传的文件路径是项目目录下的

ServerRec 文件夹。

8

9

10

服务器日志

日志保存在项目目录下的 Serverlog.txt,记录了用户的登录、注册、上传、下载操作及具体的时间和操作的状态,如图:

11

五、抓包分析

使用 Wireshark 对应用产生的流量进行抓包分析,结果如下:

5.1 不使用 SSL 加密

过滤条件为:ip.addr == 127.0.0.1 and tcp.port == 9999

前三个数据包如下:第一个数据包为客户端(端口 50623)向服务器(端口 9999)发送,其中 SYN 被置位了,说明这是个 TCP 连接请求包。第二个包为服务器向客户端发送,其中 SYN 被置位,ACK 为 1,说明是确认了客户端的连接请求。第三个包为客户端向服务器发送,ACK 为 1。至此,TCP 三次握手建立完成。

12

从第四个包开始,是服务器与客户端的数据传输包,可以看到,每次发送后都会收到对方的反馈包,ACK 为自己的 Seq+len+1。这是 TCP 的协议决定的,以此实现可靠的传输。这里也能看出,客户端的数据包头为 1024 字节,服务器的数据包头为 128 字节,与我们的协议设置一致。

13

点开第四个包的内容(客户端登录请求的数据包头),可以看到信息都以明文的方式传输,非常不安全。如果被人嗅探,则很容易泄露账号及密码。

14

5.2 使用 SSL 加密

前三个包依然是 TCP 三次握手,在握手完成之后客户端跟服务器开始了 SSL 加密协议商定过程,可以看到双方互相交换了证书、Key 等信息。

15

点开一个 Application Data 包,发现内容都是乱码,说明已经被加密,嗅探者无法破译内容。证明我们的 SSL 加密是成功的。

16

六、实验收获与体会

​ 这次的实验让我学到了很多东西,让我对 SSL 加密传输和 TCP 协议有了更深的了解。以前都是在书上看到的 TCP 协议知识,这次通过自己抓包,验证了 TCP 的三次握手、ACK 号等等,让我对计算机网络知识更加感兴趣了。此外,这次实验自己设计协议,自己申请 SSL 证书、实现 GUI 等都是以前没有试过的,完成之后成就感非常大,对相关领域的理解又加深了一点。

​ 此次实验遇到的问题主要有 GUI 的设计、SSL 证书的申请等。因为事前不是很了解,所以开发时比较难处理,后来经过大量查阅资料、逛博客、学习别人代码,终于把困难一一解决,成功实现了所有功能。这次的实验锻炼了我思考和解决问题的能力,也增加了自己的经验,非常充实。

参考文献

  • 基于代理重加密的邮件系统的研究与设计(暨南大学·李应开)
  • 内部网络信息安全防护系统——信息管理与展示子系统的设计与实现(东北大学·李春娇)
  • 基于J2EE权限管理系统平台设计与实现(吉林大学·任翔)
  • 基于Java EE的数据库间的通用数据传输系统的分析与设计(北京邮电大学·陈飞雁)
  • 基于Tor的文件传输管理系统的设计与实现(北京邮电大学·邱秀杰)
  • 基于GRPC的安全存储系统的设计与实现(北京交通大学·方赢)
  • 商务网站后台系统的设计与实现(电子科技大学·蒋豪)
  • 商务网站后台系统的设计与实现(电子科技大学·蒋豪)
  • 基于Tor的文件传输管理系统的设计与实现(北京邮电大学·邱秀杰)
  • 基于Tor的文件传输管理系统的设计与实现(北京邮电大学·邱秀杰)
  • 基于J2EE的入侵检测配置与日志审计服务系统的研究与实现(国防科学技术大学·肖毅)
  • 基于J2EE的入侵检测配置与日志审计服务系统的研究与实现(国防科学技术大学·肖毅)
  • 电信公司办公助手的设计与实现(北京邮电大学·陈琳)
  • 基于J2EE与OpenSSL的物流系统安全性研究及实现(北京邮电大学·田轶)
  • 基于数据安全通信的分布式入侵防御系统研究(电子科技大学·周峻锋)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码码头 ,原文地址:https://bishedaima.com/yuanma/35791.html

相关推荐

发表回复

登录后才能评论