新闻 | 自动化运维之一 文件传输功能socket实现方式探索
Posted 上海分中心技术论坛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了新闻 | 自动化运维之一 文件传输功能socket实现方式探索相关的知识,希望对你有一定的参考价值。
一、背景介绍
目前运维平台使用的文件传输方式为ftp,由于安全加固要求,服务器密码会定期修改,而ftp传输功能也要随之修改参数。功能测试环境服务器数量大,文件传输功能定期修改密码的工作非常繁杂,如不及时修改,会造成正常功能无法使用,存在很大的风险。因此提出一个新的不依赖用户密码的传输方式是平台迫切需要的。
二、实现方法分析
以下我们使用socket通信方式研究文件传输功能的python、shell及java实现。
2.1 服务端python+客户端python方式
2.1.1实现原理
服务端:python中标准库自带的socket模块提供socket传输的相关功能。我们使用socketserver模块启动一个等待连接的socket通道,设定监听端口实时监听客户端请求。socketserver内部使用IO多路复用及多线程、多进程,使用其ThreadingTCPServer方法可为每个连接的客户端创建一个线程,从而实现并发处理多个客户端请求的功能。在文件传输功能中,服务端首先接收客户端指令,判断操作动作及文件名称,如客户端申请发送文件,则服务端读取socket接收数据后写入相应文件。如客户端申请接收文件,则服务端找到对应文件,读取文件内容并传入发送通道。
客户端:使用socket模块,主动发起连接。在文件传输功能中,发送文件是读取相应文件内容并传入发送通道,接收文件是获取接收数据并写入相应文件。
2.2 服务端python+客户端shell方式
2.2.1 实现方法一(仅适用LINUX)
2.2.1.1实现原理
由于功能测试环境的服务器没有统一安装python软件, python方式的socket客户端无法推广到所有客户端使用。因此我们尝试使用服务器普适的shell编写socket。
在一切皆为文件的Unix系统思想中,socket以一种“打开——读/写——关闭”的模式实现,类似于一个特殊的文件。Linux系统中的特殊设备/dev/tcp与之对应,这个目录实际不存在,但是只要读取或写入/dev/[tcp|udp]/host/port这个文件,就相当于系统尝试连接host这台机器的对应port端口,从而建立socket通讯通道。shell程序中我们打开host对应port的可读写socket连接后,与设定的文件描述符建立连接,再通过对文件描述符的操作实现socket传输数据的读取或写入。在文件传输功能中,客户端发送文件采用cat方式将文件内容输出到socket文件中,接收文件同样采用cat方式从socket文件中读取服务器端发来的数据并写入相应文件中,从而达到文件传输的目的。
2.2.2实现方法二(telnet方式)
2.2.2.1实现原理
查询资料显示/dev/tcp适用于类Linux系统,但是通过对AIX系统的尝试,发现无此特殊设备。因此以上方法对于功能测试环境来说仅适用于Linux系统。对于AIX系统我们找到传统的telnet方式实现tcp/udp协议通讯。于是通过telnet host port形式建立socket连接,再利用管道符将输出数据作为telnet命令的输入,从而达到向socket通道中传输数据的目的。文件传输中,客户端发送文件也采用cat方式将文件内容输出到telnet输入。
2.3服务端JAVA+客户端JAVA方式
2.3.1 实现原理
本文中的应用模型使用基于可靠连接的TCP传输进行编程。
Java中使用ServerSocket以及Socket类创建一个套接字连接,使用InputStream以及OutputStream数据流对象传输数据。应用环境需要服务端及客户端同时具有Java环境。
三、总结
socket方式的文件传输无需依赖客户端用户密码,传输操作更简单便捷。shell方式的socket文件传输实现由于shell本身提供的功能局限,在效率、准确率和灵活性方面均存在一定的缺陷。python实现方式在效率和准确率上均高于shell方式,同时提供各类函数支持应用程序根据自己的需求调整socket参数,灵活性较高。另外python本身是跨平台语言,脚本在不同操作系统中使用无需修改,但需要系统中有python环境。Java在具有python优势的同时,部署更为简便,但需要系统环境中有JDK工具包。之所以要多条途径研究socket实现方式,与中行多种操作系统平台、不同底层支撑软件有关,所以对自动化运维实现有一定的难度,后续会将根据不同应用场景做选择性的应用。
撰稿:上海维护及测试支持部 王瑞 田济榕
编辑:孙菲菲 刘培培
以上是关于新闻 | 自动化运维之一 文件传输功能socket实现方式探索的主要内容,如果未能解决你的问题,请参考以下文章